UIScrollView常用属性和代理方法&线程间通讯(下载图片)
(一)UIScrollView常见属性
(1)属性:
1 // 最大缩放比 2 _scrollView.maximumZoomScale = 3.0; 3 // 最小缩放比 4 _scrollView.minimumZoomScale = 0.2; 5 // 偏移大小 6 _scrollView.contentSize = self.img.size; 7 // 偏移量,表一开始在哪 8 _scrollView.contentOffset = CGPointMake(300, 300); 9 // 上左下右内边距,变相增加偏移大小 10 _scrollView.contentInset = UIEdgeInsetsMake(100, 100, 100, 100); 11 // 默认是YES,拖动到边缘是否弹簧回来 12 _scrollView.bounces = YES; 13 // 默认是NO,当bounces和下面的属性都是YES,那么相应的水平垂直就永远有弹簧效果 14 _scrollView.alwaysBounceHorizontal = YES; 15 _scrollView.alwaysBounceVertical = NO; 16 // 翻页,用于scroll的子类UICollectView或者UITableView中,设置新特性或者图表等 17 _scrollView.pagingEnabled = YES; 18 // 是否滚动 19 _scrollView.scrollEnabled = YES;
代理方法中最主要的有两个,一个是缩放哪个视图,一个是监视这个视图的状态(transform一改变就会触发)
1 // 代理 2 3 - (UIView*)viewForZoomingInScrollView:(nonnull UIScrollView *)scrollView{ 4 return self.imgView; 5 } 6 7 - (void)scrollViewDidZoom:(nonnull UIScrollView *)scrollView{ 8 // 形变仿射矩阵 9 NSLog(@"%@",NSStringFromCGAffineTransform(self.imgView.transform)); 10 11 }
下面我们看一下transform这个属性
是一个结构体。在代理方法scrollViewDidZoom方法中监听transform状态时,观察数值
可以得到结论:
a和d控制缩放比例
tx,ty应该是位移
而旋转应该是由a,b,c,d一起控制的。
(二)线程间通讯:
简单点的线程间通讯就是在网络访问中获取到数值(这个过程永远都是耗时的,是异步的),所以在子线程获取url,在主线程更新UI,就是线程间通讯的简单描述。
可以用NSThread方法来完成。
// 子线程下载 [self performSelectorInBackground:@selector(downloadImage) withObject:nil];
// 主线程更新
[self performSelectorOnMainThread:@selector(setImg:) withObject:_img waitUntilDone:NO]; } - (void)setImg:(UIImage *)img{ NSLog(@"%@,%s",[NSThread currentThread],__FUNCTION__); self.imgView.image = img; [self.imgView sizeToFit]; }