OC开发_Storyboard——多线程、UIScrollView

一、多线程

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

时间: 2025-01-12 05:45:25

OC开发_Storyboard——多线程、UIScrollView的相关文章

OC开发_Storyboard——block和动画

 一.协议 @optional :可选的 @requied :必须实现的  二.block 代码块 1. 以一个^开头,然后是参数,然后是一个大括号,包含我们的代码块 1 [aDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL *stop) { 2 NSLog(@“value for key %@ is %@”, key, value); 3 if ([@“ENOUGH” isEqualToString:ke

OC开发_Storyboard——iPad开发

iPad开发(Universal Applications) 一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad); 二.UISplitViewController 分割视图控制器 1.UISplitViewController 分割视图控制器(顶级视图,不能放在Nav或者其他视图中) (1  可以通过 if (self.splitVie

OC开发_Storyboard——Core Data

一 .NSManagedObjectContext 1.我们要想操作Core Data,首先需要一个NSManagedObjectContext2.那我们如何获得Context呢:创建一个UIManagedDocument 二.UIManagedDocument 1.UIManagedDocument是一系列用于管理存储的机制:  [将Core Data数据库放入某存储空间,相当于是管理core data 数据库的存储,所以我们只需要打开和存储]2.那我们如何得到UIManagedDocumen

OC开发_Storyboard——AutoLayout

一.autolayout 自动布局: 1. 设置所有视图框架的三种方法,可以通过代码创建也可以storyboard设置 = 规则 (1 蓝线+约束:(位置) 使用蓝线,根据蓝线拖动控件,只是告诉Xcode我要这样设置,但是还需要Xcode为我们执行相应的规则和约束 Reset to Sugested Constrains in VIew Controller(前提是使用了蓝线) (2 点击底部菜单按钮:Add New Alignments Constraints 具体设置(需要 update f

OC开发_Storyboard——绘制和视图

1.绘制 不要调用drawRect.调用setNeedsDisplay相当于告知系统视图需要重绘, 它会去调用drawRect,更新屏外缓冲器 2.UIBezierPath绘制图形,   设置图像opaque属性=no,根据透明度一层层合成视图,比直接修改比特值的开销会大很大多,消耗性能   如果只是显示的问题可以通过设置hidden 3.UIGestureRecognizer setNeedDisplay是为了让有人修改时重绘 ,据目标大小,选择合适尺寸 现在利用绘制做一个小demo,效果如下

OC开发_Storyboard——UITableView

一.tableView 1.datasource数据源 (1 构造每一个tableVIewCell的方法:cellForRowAtIndexPath,这里的 dequeueReusableCellWithIdentifier会根据识别ID去取storyBoard中的cell,同时这也是利用取缓存中的cell复用 (2 还包含了另外两个方法,numberOfSectionsInTableView 默认是返回1如果不重写它的话:numberOfRowsInSection是没有默认值的,所以实现数据源

OC开发_Storyboard——UIApplication和网络活动指示器

一.UIApplication 只有一个实例: UIApplication *myApplication = [UIApplication sharedApplication]; 属性如果设置为YES的话,状态栏上的小转轮就会转,NO则不会[网络活动的表示,正在进行网络活动] @property (nonatomic, getter=is...) networkActivityIndicatorVisible;

OC开发_Storyboard——MapKit

一.Core  Location 1.基本对象 @propertys: coordinate, altitude, horizontal/verticalAccuracy, timestamp, speed, course @property (readonly) CLLocationCoordinate2D coordinate; typedef { CLLocationDegrees latitude; //   double型 纬度 CLLocationDegrees longitude;

OC开发学习过程中的一些小经验

1.引入头文件以及框架 :  @import   XXXX         XXXX表示需要引入的文件/框架2.头文件引用循环:两个头文件相互包含时,将其中一个头文件的类用@class引入3.设置边角幅度 :[  XX.layer setCornerRadius:100 ]  ;    XX表示需要设置边角的对象,一般是给按钮设置,边角幅度大小跟最后数字取值关联.4.多个引号处理方法:引号前加\,如果还有括号影响,就再单独用@“ “将其框起来..专业术语叫转义字符.. 5.在UIWebview中