一、多线程
1、主队列:处理多点触控和所有UI操作(不能阻塞、主要同步更新UI)
dispatch_queue_t mainQueue = dispatchg_get_main_queue(); //获得主线程
Dispatch_async(queue ,^{ }); //异步执行Block
dispatch_queue_t Queue = dispatch_queue_create(“name”,NULL);//创建一个
2、更新UI必须在主线程中执行,有两种方法
1 //更新UI必须在主线程中执行,有两种方法, 2 //一种是指定委托在主线程中 3 NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration 4 delegate:nil 5 delegateQueue:[NSOperationQueue mainQueue]]; 6 NSURLSessionDownLoadTask *task; 7 task = [session downloadTaskWithRequest:request 8 completionHandler:^(NSURL *localfile,NSURLResponse *response,NSError *error ){ 9 //这里就可以直接调用UI操作了 10 }]; 11 [task resume]; 12 13 //一种是不指定委托: 14 //然后如果在completionHandler中调用主线程的话,就相当于completionHandler在一个非主线程的队列里调用主线程 15 NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration]; 16 NSURLSessionDownLoadTask *task; 17 task = [session downloadTaskWithRequest:request 18 completionHandler:^(NSURl *localfile,NSURLResponse *response,NSError,error){ 19 //因为没有调用主线程委托,所以采用调用主线程异步队列:两种方式才能调用UI操作 20 dispatch_async(dispatch_get_main_queue(), ^{ // 这里就可以调用UI操作 }); 21 //或者: 22 [self performSelectorOnMainThread:@selector(doUIThingsFunction) withObject:nil waitUtilDone:NO]; 23 }]; 24 //重新启动(默认是挂起的) 25 [task resume];
二、UISCrollView
1、
//contentSize代表滚动的范围
scrollView.contentSize = CGSizeMake(1,1);
//当前所示的范围(左上角的坐标)
CGPoint *visibleP= scrollView.contenetOffSet;
2、缩放
// 1.设置缩放比例
scrollView.minimumZoomScale = 0.5;
scrollView.maximumZoomScale = 2.0;
//2、缩放委托
-(UIView *) viewForZoomingInScrollVIew:(UIScrollView *)sender;//返回哪个view可以缩放
//3、或者实现手势缩放
@property (nonatomic) float zoomScale;
-(void)setZoomingScale:(float)scale animated:(BOOL)animated;
-(void)zoomToRect:(CGRect)zoomRect animated:(BOOL)animated;
三、运行demo
这个demo是下载网上的图片,采用多线程的方法[有主线程也有另开线程], 同时将图片显示在我们的UIScrollView中,设置缩放比列,同时也会在下载过程设置加载的图像
1、运行效果如下:
2、注意的一些问题
(1 我们这里的UIimage 没有并使用synthesize但是没有报错,是因为我们并没有合成实例变量,而是采用imageview.image来定义的,没有使用_image
(2
第一个:NSURLSessionConfiguration 这里有三种会话模式,default默认的,ephemeral临时的,background运行在后台的
第二个:多线程任务中,网络请求的漫长过程中可能存在后续改动,URL地址可能会受到变动,如果变动的,我们就会放弃获取到的内容。
第三个:上面的执行是存在于非主队列中的, 但是下面要执行的是指图像信息的需要更新UI操作,最好是在主队列中执行
demo下载地址;http://pan.baidu.com/s/1qWyWLIW