UIScrollView

2018-05-11 13:50:48 浏览数 (1)

UIScrollView

UIScrollView全部API学习。

代码语言:javascript复制
//1.设定滚定条的样式

typedef
NS_ENUM(NSInteger, UIScrollViewIndicatorStyle) {

UIScrollViewIndicatorStyleDefault, // black with white border. good against any background
黑白边框

UIScrollViewIndicatorStyleBlack, // black only. smaller. good against a white background
纯黑边框

UIScrollViewIndicatorStyleWhite // white only. smaller. good against a black background
纯白边框

};

//2.在UIScrollView中键盘的消失方式

typedef
NS_ENUM(NSInteger, UIScrollViewKeyboardDismissMode) {

UIScrollViewKeyboardDismissModeNone,
默认样式

UIScrollViewKeyboardDismissModeOnDrag,
// dismisses the keyboard when a drag begins
设定键盘的消失方式为拖拉页面

UIScrollViewKeyboardDismissModeInteractive,
// the keyboard follows the dragging touch off screen, and may be pulled upward again to cancel the dismiss
设定键盘消失方式为拖拉并点击页面

} NS_ENUM_AVAILABLE_IOS(7_0);

//3.这个参数可以设置减速的速率

UIKIT_EXTERN
const CGFloat UIScrollViewDecelerationRateNormal
NS_AVAILABLE_IOS(3_0);

//4.这个参数可以设置减速的速率

UIKIT_EXTERN
const CGFloat UIScrollViewDecelerationRateFast
NS_AVAILABLE_IOS(3_0);

//5.从内容视图的原点偏移的一个点

@property(nonatomic)
CGPoint contentOffset;
//6.内容视图的大小

@property(nonatomic)
CGSize contentSize;

//7.内容视图的距离,是从封闭的滚动视图插图

@property(nonatomic)
UIEdgeInsets contentInset;
around content

//8.滚动视图的代理

@property(nonatomic,assign)
id<UIScrollViewDelegate> delegate;

//9.一个bool值,用来决定是否在某一特定方向禁用滚动

@property(nonatomic,getter=isDirectionalLockEnabled)
BOOL directionalLockEnabled;

//10.控制滚动视图是否反弹过去内容的边缘,然后再返回一个布尔值

@property(nonatomic)
BOOL bounces;

//11.如果这个属性被设置成YES而且bounces的值是YES,垂直拖动是允许的内容,即使小鱼滚动视图的边界,默认是NO

@property(nonatomic)
BOOL alwaysBounceVertical;

//12.一个布尔值,决定是否反弹总是发生在垂直滚动到达结束内容,默认值是NO

@property(nonatomic)
BOOL alwaysBounceHorizontal;

//13.一个布尔值
决定是否弃用分页滚动视图

@property(nonatomic,getter=isPagingEnabled)
BOOL pagingEnabled;

//14.决定是否弃用滚动

@property(nonatomic,getter=isScrollEnabled)
BOOL scrollEnabled;

//15.控制水平滚动指标是否可见的

@property(nonatomic)
BOOL showsHorizontalScrollIndicator;

//16.控制垂直滚动指标是否是可见的

@property(nonatomic)
BOOL showsVerticalScrollIndicator;

//17.滚动指标点到滚动视图的边缘的距离

@property(nonatomic)
UIEdgeInsets scrollIndicatorInsets;
//18.指示器的风格设置

@property(nonatomic)
UIScrollViewIndicatorStyle indicatorStyle;

//19.默认减速率

@property(nonatomic)
CGFloat decelerationRate
NS_AVAILABLE_IOS(3_0);

//20.设置从内容原点偏移到指定点的方法

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
//21.滚动一个特定区域的内容以便它在接受是可见的

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;
//22.暂时显示滚动指标

- (void)flashScrollIndicators;

//23.返回判断是否用户碰触内容触发滚动(只读)

@property(nonatomic,readonly,getter=isTracking)
BOOL tracking;

//24.一个布尔值
知识用户是否已经开始滚动内容

@property(nonatomic,readonly,getter=isDragging)
BOOL dragging;

//25.返回的内容是否在滚动视图后,用户接触他们的手指(只读)

@property(nonatomic,readonly,getter=isDecelerating)
BOOL decelerating;

//26.一个布尔值,决定是否推迟滚动视图触摸手势的处理

@property(nonatomic)
BOOL delaysContentTouches;

//27.如果这个值设置为YES,那么当你在UIScrollView上面放置任何子视图的时候,当你在子视图上移动的时候,UIScrollView会给子视图发送touchCancel消息,而如果该属性设置为NO,ScollView本身不处理这个消息,全部交给子视图处理

@property(nonatomic)
BOOL canCancelContentTouches;

//28.自定义默认行为,当手指触摸在显示的内容由子类重写

- (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView
*)view;

//29.它开始发送跟踪邮件的内容视图后动视图调用此方法。如果它从这种方法受到NO便停止拖动和转发触摸时间的内容子视图。

- (BOOL)touchesShouldCancelInContentView:(UIView *)view;

//30.浮点值
指定可应用于滚动视图的内容的最低比例因子

@property(nonatomic)
CGFloat minimumZoomScale;

//31.一个浮点值指定可用于滚动视图的内容的最大规模的因素

@property(nonatomic)
CGFloat maximumZoomScale;

//32.一个浮点值
指定目前用于滚动视图的内容的比例因子

@property(nonatomic)
CGFloat zoomScale
NS_AVAILABLE_IOS(3_0); //33.一个浮点数指定当前的缩放比例

- (void)setZoomScale:(CGFloat)scale animated:(BOOL)animated
NS_AVAILABLE_IOS(3_0);

//34.缩小到特定区域的内容,所以它是在接收器中可见

- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated
NS_AVAILABLE_IOS(3_0);

//35.一个布尔值,决定当当缩放超过上限或是下限时是否滚动视图推动内容缩放

@property(nonatomic)
BOOL bouncesZoom;

//36.一个布尔值
指示内容是否认为正在方法或者缩小(只读)

@property(nonatomic,readonly,getter=isZooming)
BOOL zooming;

//37.一个布尔值
指示缩放已超过指定的接受范围

@property(nonatomic,readonly,getter=isZoomBouncing)
BOOL zoomBouncing;

//38.一个布尔值
控制是否滚动到顶部的姿态是有效地

@property(nonatomic)
BOOL scrollsToTop;

//39.拖动手势(只读)

@property(nonatomic,
readonly) UIPanGestureRecognizer *panGestureRecognizer
NS_AVAILABLE_IOS(5_0);

//40.向里向外捏用于缩放

@property(nonatomic,
readonly) UIPinchGestureRecognizer *pinchGestureRecognizer
NS_AVAILABLE_IOS(5_0);

//41.设置见哦按的小事样式

@property(nonatomic)
UIScrollViewKeyboardDismissMode keyboardDismissMode
NS_AVAILABLE_IOS(7_0);

@end

@protocol UIScrollViewDelegate<NSObject>

@optional

//42.scrollView正在滚动的时候调用

- (void)scrollViewDidScroll:(UIScrollView *)scrollView;

//43.scrollView正在被拖动的时候调用

- (void)scrollViewDidZoom:(UIScrollView *)scrollView
NS_AVAILABLE_IOS(3_2);

//44. scrollView开始拖拽的时候调用

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

//45. scrollView将要结束拖拽的时候调用

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity
targetContentOffset:(inout
CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0);

//46. scrollView完成拖拽的时候调用

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

//47. scrollView将开始降速的时候调用

- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView;

//48. scrollView在减速停止了时候执行,手触摸时候执行

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;

//49. 滚动动画停止时执行代码改变时触发,也就是setContentOffset改变的时候

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;

//50.返回一个放大或者缩小的视图

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView;

//51.开始放大或者缩小时候调用

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView
*)view NS_AVAILABLE_IOS(3_2);

//52.缩放结束时候调用

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView
*)view atScale:(CGFloat)scale;

//53.是否支持滚动至顶部

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView;

//54.滚动顶部时候调用该方法

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView;

@end

UIScrollView的常见属性

代码语言:javascript复制
@property(nonatomic) CGPoint contentOffset;
这个属性用来表示UIScrollView滚动的位置
(其实就是内容左上角与scrollView左上角的间距值,初始位置)

@property(nonatomic) CGSize contentSize;
这个属性用来表示UIScrollView内容的尺寸,滚动范围(能滚多远)

@property(nonatomic) UIEdgeInsets contentInset;
这个属性能够在UIScrollView的4周增加额外的滚动区域,一般用来避免scrollView的内容被其他控件挡住

代码语言:javascript复制
@property(nonatomic) BOOL bounces;
设置UIScrollView是否需要弹簧效果

@property(nonatomic,getter=isScrollEnabled) BOOL scrollEnabled;
设置UIScrollView是否能滚动

@property(nonatomic) BOOL showsHorizontalScrollIndicator;
是否显示水平滚动条

@property(nonatomic) BOOL showsVerticalScrollIndicator;
是否显示垂直滚动条

//分页。默认是 _scrollView 的宽度
_scrollView.pagingEnabled = YES;

UIScrollView不能滚动的条件

  • contentOffset属性
  • AntoLayout 取消
  • scrollEnabled 属性 = YES;
  • userInteractionEnabled 属性 = YES;

监听scrollView各种行为的3大步骤(比如让控制器监听scrollView的行为)

  • 设置scrollView的delegate(代理)为控制器对象
代码语言:javascript复制
scrollView.delegate = 控制器;
  • 控制器要遵守UIScrollViewDelegate协议
代码语言:javascript复制
@interface 控制器 ()  <UIScrollViewDelegate>

@end
  • 控制器要实现UIScrollViewDelegate协议里面的代理方法
代码语言:javascript复制
#pragma mark - <UIScrollViewDelegate>  代理方法
/**
 *  只要scrollView在滚动,就会调用这个方法(监听scrollView的滚动)
 */
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSLog(@"scrollViewDidScroll");
}

//开始拖拽
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

//停止拖拽
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

缩放

  • 设最大、最小缩放比例
代码语言:javascript复制
_scrollView.minimumZoomScale = 0.3;
_scrollView.maximumZoomScale = 2.0;

//拖拽调用得方法(返回的是需要进行缩放的控件)
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
    return _beautifulView;
}

代理使用的一般规律

  • 作用:用来监听控件的某些行为
  • 代理:是控制器对象
  • 代理:是id类型,并且是弱指针
  • 代理协议的格式:控件类名Delegate,比如UIScrollViewDelegate、UITextFieldDelegate
  • 代理方法:方法名一般是控件名开头,比如UIScrollView的代理方法一般以scrollView开头

如何监听控件的行为

  • 通过addTarget:
    • 只有继承自UIControl的控件,才有这个功能
    • UIControlEventTouchUpInside : 点击事件(UIButton)
    • UIControlEventValueChanged : 值改变事件(UISwitch、UISegmentControl、UISlider)
    • UIControlEventEditingChanged : 文字改变事件(UITextField)
  • 通过delegate
    • 只有拥有delegate属性的控件,才有这个功能

NSTimer的使用

  • 开启定时器
代码语言:javascript复制
@property (nonatomic, weak) NSTimer *timer;

// 返回一个自动开始执行任务的定时器
self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@"123" repeats:YES];

// 修改NSTimer在NSRunLoop中的模式:NSRunLoopCommonModes
// 主线程不管在处理什么操作,都会抽时间处理NSTimer
[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
  • 关闭定时器
代码语言:javascript复制
[self.timer invalidate];

0 人点赞