iOS —) UIScrollVeiw
程序员文章站
2022-04-27 11:06:32
一、UIScrollView简述:
作用:
UIScrollView可以让一个大小超出展示范围的UIView,通过手指的拖动,展示出这个UIView的其他部分,并且可以通过手势...
一、UIScrollView简述:
作用:
UIScrollView可以让一个大小超出展示范围的UIView,通过手指的拖动,展示出这个UIView的其他部分,并且可以通过手势,对UIView进行缩放
读写属性
CGFloat screenW = [UIScreen mainScreen].bounds.size.width; CGFloat screenH = [UIScreen mainScreen].bounds.size.height; UIScrollView *scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, screenW,screenH)]; //(CGSize类型):告诉UIScrollView所有内容的尺?寸,也就是告诉 它滚动的范围(能滚多远,滚到哪?里是尽头) scrollView.contentSize = CGSizeMake(screenW,screenH); //(CGPoint类型):用来表?示UIScrollView滚动的位置,(可以手动设置) scrollView.contentOffset = CGPointMake(100, 100); //(UIEdgeInsets类型) 这个属性能够在UIScrollView的4周增加额外的滚动区域 scrollView.contentInset = UIEdgeInsetsMake(0, 0, 20, 20); //(BOOL类型): 弹簧效果 scrollView.bounces = NO; //(BOOL类型): 是否可以滚动 scrollView.scrollEnabled = NO; //(BOOL类型): 横向与纵向的滚动条是否显示 scrollView.showsHorizontalScrollIndicator = NO; scrollView.showsVerticalScrollIndicator = NO;
其他属性
scrollView.tracking;//当touch后还没有拖动的时候,值是YES,否则NO; scrollView.zoomBouncing;//当内容放大到最大或者最小的时候,值是YES,否则NO scrollView.zooming;//当正在缩放的时候,值是YES,否则NO scrollView.decelerating;//当滚动后,手指放开,但是还在继续滚动中,这个时候是 YES,其他是NO scrollView.decelerationRate;//设置手指放开后的减速率 scrollView.maximumZoomScale;//一个浮点数,表示能放最大的倍数 scrollView.minimumZoomScale;//一个浮点数,表示能缩最小的倍数 scrollView.pagingEnabled;//当值是YES,会自动滚动到subview的边界,默认是NO scrollView.scrollEnabled;//决定是否可以滚动 scrollView.delaysContentTouches; //是个布尔值,当值是YES的时候,用户触碰开始,scroll view要延迟一会,看看是否用户有意图滚动,假如滚动了,那么捕捉touch-down事件,否则就不捕捉, 假如值是NO,当用户触碰, scroll view会立即触发touchesShouldBegin:withEvent:inContentView:, 默认是YES scrollView.canCancelContentTouches; //当值是YES的时候,用户触碰后,然后在一定时间内没有移动,scrollView发送tracking events,然后用户移动手指足够长度触发滚动事件,这个时候,scrollView发送了touchesCancelled:withEvent: 到subview,然后scroView开始滚动 //假如值是NO,scrollView发送tracking events后,就算用户移动手指,scrollView也不会滚动 scrollView.contentSize;//里面内容的大小,也就是可以滚动的大小,默认是0,没有滚动效果。 scrollView.showsHorizontalScrollIndicator;//滚动时,是否显示水平滚动条 scrollView.showsVerticalScrollIndicator;//滚动时,是否显示垂直滚动条 scrollView.bounces;//默认是yes,就是滚动超过边界,会反弹有反弹回来的效果,假如是 NO,那么滚动到达边界,那么会连忙停止 scrollView.bouncesZoom;//和bounces类似,区别在于,这个效果反映在缩放上面,假如缩放超过最大缩放,那么会反弹效果,假如是NO,则到达最大或者最小的时候,立即停止 scrollView.directionalLockEnabled; //默认是NO, 可以在垂直和水平方向同时运动, 当值是YES, 假如一开始是垂直或者是水平运动,那么接下来会锁定另外一个方向的滚动, 假如一开始是对角方向滚动,则不会禁止某个方向 scrollView.indicatorStyle; //滚动条的样式,基本只是设置颜色,总共3个颜色,默认,黑色的,白色的 scrollView.scrollIndicatorInsets; //设置滚动条的位置
二、注意事项:
1.不能滚动:
1. contentSize 这个属性,比uiscrollview的frame要小, 无需滚动, 自然就滚动不了。
2. scrollenabled 这个属性,标识着是否允许滚动,要言设成yes
三、代理方法:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView; // any offset changes 只要scrollView的content 这个方法在任何方式触发 contentOffset // 变化的时候都会被调用(包括用户拖动,减速过程,直接通过代码设置等),可以用于监控 contentOffset // 的变化,并根据当前的 contentOffset 对其他 view 做出随动调整。 // called on start of dragging (may require some time and or distance to move) - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView; // 用户开始拖动 scroll view 的时候被调用,可能需要一些时间和距离移动之后才会触发。 // called on finger up if the user dragged. velocity is in points/millisecond. // targetContentOffset may be changed to adjust where the scroll view comes to rest - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0); // 在 didEndDragging 前被调用,当 willEndDragging 方法中 velocity 为 CGPointZero //(结束拖动时两个方向都没有速度)时,didEndDragging 中的 decelerate 为 NO,即没有减速过程, //willBeginDecelerating 和 didEndDecelerating 也就不会被调用。反之, // 当 velocity 不为 CGPointZero 时,scroll view 会以 velocity 为初速度, // 减速直到 targetContentOffset。 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; // 在用户结束拖动后被调用,decelerate 为 YES 时, // 结束拖动后会有减速过程。注,在 didEndDragging 之后,如果有减速过程, // scroll view 的 dragging 并不会立即置为 NO,而是要等到减速结束之后, // 所以这个 dragging 属性的实际语义更接近 scrolling。 - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; // 减速动画开始前被调用。 - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView; // 减速动画结束时被调用,这里有一种特殊情况:当一次减速动画尚未结束的时候再次 drag scroll view, // didEndDecelerating 不会被调用,并且这时 scroll view 的 dragging 和 decelerating 属性都是 YES。 // 新的 dragging 如果有加速度,那么 willBeginDecelerating 会再一次被调用,然后才是 didEndDecelerating; // 如果没有加速度,虽然 willBeginDecelerating 不会被调用,但前一次留下的 didEndDecelerating 会被调用 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView; // called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating - (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2); // any zoom scale changes view缩放改变的时候调用。 - (nullable UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView; // return a view that will be scaled. if delegate returns nil, nothing happens 告诉代理要缩放那个控件。 - (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view NS_AVAILABLE_IOS(3_2); // called before the scroll view begins zooming its content缩放开始的时候调用 - (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(nullable UIView *)view atScale:(CGFloat)scale; // scale between minimum and maximum. called after any 'bounce' animations缩放完毕的时候调用。 - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView; // return a yes if you want to scroll to the top. if not defined, assumes YES- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView; // called when scrolling animation finished. may be called immediately if already at top滚动动画完成时调用。
上一篇: 华为鸿蒙OS尖刀武器之分布式软总线技术
下一篇: 美图秀秀怎么将照片制作成老旧的照片?