IOS开发基础—uiscrollview的基本使用
2015-05-12 14:46
399 查看
1 摘要
主要介绍uiscrollview的基本知识。2 基本使用
作用UIScrollView可以用于显示多于一个屏幕的内容,超出屏幕范围的内容可以通过滑动进行查看
常见属性
CGSize contentSize :设置UIScrollView的滚动范围
CGPoint contentOffset :UIScrollView当前滚动的位置
UIEdgeInsets contentInset :这个属性可以在四周增加滚动范围
其他属性
BOOL bounces 是否有弹簧效果
BOOL scrollEnabled 是否能滚动
BOOL showsHorizontalScrollIndicator 是否显示水平方向的滚动条
BOOL showsVerticalScrollIndicator 是否显示垂直方向的滚动条
UIScrollViewIndicatorStyle indicatorStyle 设定滚动条的样式
BOOL dragging 是否正在被拖拽
BOOL tracking 当touch后还没有拖动的时候值是YES,否则NO
BOOL decelerating 是否正在减速
BOOL zooming 是否正在缩放
手势缩放
设置UIScrollView的id delegate代理对象
设置minimumZoomScale :缩小的最小比例
设置maximumZoomScale :放大的最大比例
让代理对象实现下面的方法,返回需要缩放的视图控件
(UIView )viewForZoomingInScrollView:(UIScrollView )scrollView
跟缩放相关的常用方法还有
正在缩放的时候调用
-(void)scrollViewDidZoom:(UIScrollView *)scrollView
缩放完毕的时候调用
-(void)scrollViewDidEndZooming:(UIScrollView )scrollView withView:(UIView )view atScale:(float)scale
3 实例代码
#import "ViewController.h" #pragma mark 重点1:此处没有遵守协议,但是缩放操作依然可以进行,是不是该版本软件自动实现了。 区别就是,遵守协议的话,写方法的时候会有提示方法名字,不写的话,没有提示,但是因为方法的实现是存在的,所以可以调用。 此处的遵守协议放在头文件也可以,此处的<>遵守协议后,就实现了包含协议方法声明的作用,而自定义的代理模式里面,仅仅这样<>遵守达不到那样的效果,要间接或者直接包含才可以。 @interface ViewController ()<UIScrollViewDelegate> { UIImageView *_imageView; UIScrollView *_scrollView; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; UIImage *image = [UIImage imageNamed:@"big.jpg"]; CGFloat imgH = image.size.height; CGFloat imgW = image.size.width; NSLog(@"imghw %f %f", imgH, imgW); _scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 20, 250, 250)]; _scrollView.contentSize = CGSizeMake(imgW, imgH); _scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; // scrollView.bounces = NO; #pragma mark 重点2:scrollview的代理属性。 _scrollView.delegate = self; _scrollView.maximumZoomScale = 2; _scrollView.minimumZoomScale = 0.1; _scrollView.backgroundColor = [UIColor redColor]; //将scrollview添加到view中。 [self.view addSubview:_scrollView]; #pragma mark 注意点1:这样设置的imageview其尺寸自动为图片的尺寸,相当于下面的代码。 _imageView = [[ UIImageView alloc] initWithImage:image]; // UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, imgW, imgH)]; // imageView.image = image; #pragma mark 注意点2:放在这是为了体会,imageview的原点还是插入之前的原点。 _scrollView.contentInset = UIEdgeInsetsMake(10, 20, 40, 30); [_scrollView addSubview:_imageView]; } #pragma mark 重点3:实现代理的缩放方法。 - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView { return _imageView; } - (IBAction)bottomMove:(UIButton *)sender { float x = 20; CGFloat y = 30; NSLog(@"y=%f x = %f",y,x); NSLog(@"%f %f", _scrollView.contentOffset.x, _scrollView.contentOffset.y); CGPoint temp = _scrollView.contentOffset; temp.y += 20; #pragma mark 注意点3:该属性的值不受contentsize的限制 _scrollView.contentOffset =temp; NSLog(@"%f %f", _scrollView.contentOffset.x, _scrollView.contentOffset.y); } @end
4 重点 难点 注意点
所用的Xcode6.4中,代理在没有遵守协议的情况下,依然可以实现协议的方法。区别就是,在写方法的时候没有同步提示名字,但因为方法的实现存在,所以还是可以调用方法的。利用initwithimage设置uiimageview的iamge属性时,它的尺寸默认是图的尺寸。
contentinsert方法,不影响uiscrollview的原点,图片还是在原来的原点位置。
contentoffset方法,其值不受contentsize的约束。
打印cgfloat和float类型的变量,如果用%d的话,结果为0。
一般在系统自带的类的声明中,用@Package修饰的变量,仅供类内部使用,是私有的,不能在类外面调用,不算类的属性。
5 疑问
为什么contentoffset不收contentsize的约束?缩放中,没有遵化协议也是可以操作的,和自定义的代理设计不同,而且其遵守协议就相当于包含了协议中的方法,和自定义的代理设计也是不同的????
相关文章推荐
- ioS开发之UI基础--UIScrollView的基本使用
- IOS开发基础—通过Tom猫实例学习uiimageview的基本使用
- IOS开发基础—UITableView的基本使用。
- iOS开发UI基础—19UITableview控件基本使用
- UIScrollView的基本使用方法和注意事项 - iOS - UI基础知识总结10
- IOS 基础开发之 UIScrollView的使用
- UIScrollView基本使用。为其它添加多个button ||-iOS objective-c
- IOS开发笔记(五)---基础控件的使用(Text Filed ,Image View,Slider等)
- [ios开发基础之 Core Data[3]]如何使用NSFetchedResultsController 来集成TableView操作
- iOS开发UI篇—UITableview控件基本使用
- IOS开发UI控件<UIScrollView>和Delegate的使用
- iOS开发UI篇—UITableview控件基本使用
- IOS开发基础—通过联系人管理实例学习xib的基本使用
- iOS开发UI基础—17UIScrollView控件实现图片缩放功能
- iOS开发UI基础—25UITableview控件使用小结
- iOS开发UI基础—27使用UItableview完成一个简单的QQ好友列表(一)
- iOS开发UI基础—28使用UItableview完成一个简单的QQ好友列表(二)
- iOS开发UI基础—29UIScrollView控件实现图片轮播
- iOS开发UI基础—31在UITableview的应用中使用动态单元格来完成app应用程序管理界面的搭建
- iOS开发UI基础—32直接使用UITableView Controller