UIScrollView是什么?
——UIScrollView也是一种控件
——用来实现“滚动”和“缩放”的控件
为什么要“滚动”或“缩放”?
- 移动设备屏幕大小有限,当要显示的内容太大时,为了能更方便的查看内容所以需要“滚动”和“缩放”(“滚动”和“缩放”指的是放到UIScrollView控件里面的内容)
UIScrollView实现滚动(分三步):
》1.拖一个UIScrollView到界面上,并设置大小
》2.将需要展示的内容添加到UIScrollView中
》3.设置UIScrollView的contentSize属性
——contentSize属性的含义是:告诉UIScrollView要展示的内容实际有多大(尺寸),也就是告诉UIScrollView滚动的范围(要展示的内容超出可视范围UIScroll的范围才会滚动)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
UIScrollView的常见属性:
@property (nonatomic)CGPoint contentOffset;
当UIScrollView内部滚动时,内容相当于UIScrollView左上角的偏移
示例:
直接使用动画的方式来设置contentOffset属性的值
[self.scrollView setContentOffset:point animated:YES];
——————————————————————————————————————————————
——————————————————————————————————————————————
@property (nonatomic) UIEdgeInsets contentInset;
内容的内边距
设置UIScrollView的内容在拖动以后,内容距离UIScrollView的内边距。(联想按钮的内边距属性:Inset)
tpyedef struct UIEdgeInsets{
CGFloat top, left, bottom, right;
} UIEdgeInsets;
设置UIScrollView的内容的内边距
self.scrollview.contentInset = UIEdgeInsetsMake(100, 50, 30, 5);
——————————————————————————————————————————————
——————————————————————————————————————————————
其他属性:
@property(nonatomic,getter=isPagingEnabled) BOOL pagingEnabled;
是否分页
示例:
// 实现自动分页
self.scrollView.pagingEnabled = YES; // scrollView是根据自身的宽度来实现分页的
————————————————————————————————————————————————————————————————————————————
@property (nonatomic)BOOL bounces;
设置UIScrollView是否需要弹簧效果
——————————————————————————————————————————————
@property (nonatomic,getter=isScrollEnable)BOOL scrollEnabled;
设置UIScrollView是否能滚动
——————————————————————————————————————————————
@property (nonatomic)BOOL showHorizontalScrollIndicator;
是否显示水平滚动条
示例:
不显示水平滚动指示器
self.scrollView.showsHorizontalScrollIndicator = NO;
——————————————————————————————————————————————@property (nonatomic)BOOL showsVerticalScrollIndicator;
是否显示垂直滚动条
示例:
不显示垂直滚动指示器
self.scrollView.showVerticalScrollIndicator = NO;
-(void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
-(void)scrollViewDidEndZooming::(UIScrollView *)scrollView
@property(nonatomic)NSInteger numberOfPages;
self.pageControl.numberOfPages = 5; // 一共有5页
@property(nonatomic)NSInteger currentPage;
self.pageControl.currentPage = 0; // 当前是第0页
@property(nonatomic)BOOL hidesForSinglePage;
@property(nonatomic,retain)UIColor *pageIndicatorTintColor;
@property(nonatomic,retain)UIColor *currentPageIndicatorTintColor;
//NSTimer一般用于定时的更新一些非界面上的数据 //使用该定时器会出现卡顿的现象
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)yesOrNo;
scheduledTimerWithTimeInterval:(NSTimeInterval)seconds
预订一个Timer,设置一个时间间隔。
表示输入一个时间间隔对象,以秒为单位,一个>0的浮点类型的值,如果该值<0,系统会默认为0.1
target:(id)aTarget
表示发送的对象,如self
selector:(SEL)aSelector
方法选择器,在时间间隔内,选择调用一个实例方法
userInfo:(id)userInfo
此参数可以为nil,当定时器失效时,由你指定的对象保留和释放该定时器。
repeats:(BOOL)yesOrNo
当YES时,定时器会不断循环直至失效或被释放,当NO时,定时器会循环发送一次就失效。
停止
- (void)invalidate;
这个是唯一一个可以将计时器从runloop中移出的方法。(移除之后该计时器就废了,要想使用得重新创建一个)
self.time = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(next) userInfo:nil repeats:YES];
// 获取当前的消息循环对象
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
// 修改self.time的优先级
[runLoop addTimer:self.time forMode:NSRunLoopCommonModes];
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CADisplayLink计时器(刷帧) :默认一秒执行60次(与屏幕的刷新频率一样)
创建一个计时器:
// CADisplayLink 定时器一秒执行60次
CADisplayLink *link = [CADisplayLinkdisplayLinkWithTarget:selfselector:@selector(setNeedsDisplay)];
// CADisplayLink 定时器创建好以后默认不执行,要执行定时器,得添加到主运行循环
[link addToRunLoop:[NSRunLoopmainRunLoop] forMode:NSDefaultRunLoopMode];
[self.linkinvalidate];
self.link =nil;
// 移除主运行循环,不需要手写,因为invalidate方法,内部会把主定时,从主运行循环移除
//[self.link removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];