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必须在主线程中执行,有两种方法
//更新UI必须在主线程中执行,有两种方法,
//一种是指定委托在主线程中
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration
delegate:nil
delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDownLoadTask *task;
task = [session downloadTaskWithRequest:request
completionHandler:^(NSURL *localfile,NSURLResponse *response,NSError *error ){
//这里就可以直接调用UI操作了
}];
[task resume]; //一种是不指定委托:
//然后如果在completionHandler中调用主线程的话,就相当于completionHandler在一个非主线程的队列里调用主线程
NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration];
NSURLSessionDownLoadTask *task;
task = [session downloadTaskWithRequest:request
completionHandler:^(NSURl *localfile,NSURLResponse *response,NSError,error){
//因为没有调用主线程委托,所以采用调用主线程异步队列:两种方式才能调用UI操作
dispatch_async(dispatch_get_main_queue(), ^{ // 这里就可以调用UI操作 });
//或者:
[self performSelectorOnMainThread:@selector(doUIThingsFunction) withObject:nil waitUtilDone:NO];
}];
//重新启动(默认是挂起的)
[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
OC开发_Storyboard——多线程、UIScrollView的更多相关文章
- OC开发_Storyboard——iPad开发
iPad开发(Universal Applications) 一.iPad 1.判断是否在iPad上 BOOL iPad = ([[UIDevice currentDevice] userInterf ...
- OC开发_Storyboard——block和动画
一.协议 @optional :可选的 @requied :必须实现的 二.block 代码块 1. 以一个^开头,然后是参数,然后是一个大括号,包含我们的代码块 [aDictionary enu ...
- OC开发_Storyboard——MapKit
一.Core Location 1.基本对象 @propertys: coordinate, altitude, horizontal/verticalAccuracy, timestamp, sp ...
- OC开发_Storyboard——AutoLayout
一.autolayout 自动布局: 1. 设置所有视图框架的三种方法,可以通过代码创建也可以storyboard设置 = 规则 (1 蓝线+约束:(位置) 使用蓝线,根据蓝线拖动控件,只是告诉Xco ...
- OC开发_Storyboard——UITableView
一.tableView 1.datasource数据源 (1 构造每一个tableVIewCell的方法:cellForRowAtIndexPath,这里的 dequeueReusableCellWi ...
- OC开发_Storyboard——Core Data
一 .NSManagedObjectContext 1.我们要想操作Core Data,首先需要一个NSManagedObjectContext2.那我们如何获得Context呢:创建一个UIMana ...
- OC开发_Storyboard——UIApplication和网络活动指示器
一.UIApplication 只有一个实例: UIApplication *myApplication = [UIApplication sharedApplication]; 属性如果设置为YES ...
- OC开发_Storyboard——绘制和视图
1.绘制 不要调用drawRect.调用setNeedsDisplay相当于告知系统视图需要重绘, 它会去调用drawRect,更新屏外缓冲器 2.UIBezierPath绘制图形, 设置图像op ...
- OC开发_Storyboard——NaviationController简单例子
一个简单的Navigation的例子,demo里面用到了上一个demo的MVC,可以参考下:http://www.cnblogs.com/daomul/p/4426063.html 建立一个Nav其实 ...
随机推荐
- 为iframe添加鼠标事件
1.关于iframe标签 使用iframe元素会创建包含另外一个文档的内联框架(即行内框架).所以我们可以使用iframe标签,在一个页面嵌入另一个页面.通过指定iframe的src为另一个页面的路径 ...
- r 数据分组处理
一.R语言实现数据的分组求和 实验数据集 姓名,年龄,班级 ,成绩, 科目 student <- data.frame ( name = c("s1", "s2&q ...
- e595. Drawing an Image
See also e575 The Quintessential Drawing Program and e594 Reading an Image or Icon from a File. publ ...
- lseek函数与文件空洞
在UNIX/LINUX系统中,文件位移量可以大于文件的当前长度,这种情况下向文件中写入数据就会产生文件空洞(hole),这些没写入数据的文件空洞部分默认会被0填满.虽然这些文件空洞并没有实际的数据,但 ...
- bedtools 的安装与使用
1) 安装 bedtools 提供了3种安装方式 从google code 下载源代码进行安装 利用系统中的包管理工具进行安装, 比如cnetos 下的yum, ubuntu下的apt-get, ma ...
- C# 延时小函数 很好用
平时我们在做winform开发的时候,有时候需要让程序休眠几秒钟,但是,如果我们直接使用 thread.sleep()函数,页面ui就会停止响应.怎么样解决呢,你可以把页面涉及到表现ui的代码放到一个 ...
- 【Java面试题】14 super.getClass()方法调用
下面程序的输出结果是多少? import java.util.Date; public class Test extends Date{ public static void main(String[ ...
- mysql5.7 编码统一utf-8
查看mysql数据库编码: show variables like 'character%'; mysql> show variables like 'character%'; +------- ...
- c++ define的用法(转)
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用 ...
- Spark-Hadoop、Hive、Spark 之间是什么关系?(转)
大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗瓢盆,各有各的用处,互相之间又有重合.你可 ...