? ? ? ? ? ? ? ? ? 線程間通訊
線程間通信的體現(xiàn):1個(gè)線程傳遞數(shù)據(jù)給另1個(gè)線程 系草,在1個(gè)線程中執(zhí)行完特定任務(wù)后,轉(zhuǎn)到另1個(gè)線程繼續(xù)執(zhí)行任務(wù)。
例子:
1栖榨、定義屬性
/// 根視圖是滾動(dòng)視圖
@property (nonatomic, strong) UIScrollView *scrollView;
/// 圖像視圖
@property (nonatomic, weak) UIImageView *imageView;
/// 網(wǎng)絡(luò)下載的圖像
@property (nonatomic, weak) UIImage *image;
2、loadView 方法
? 加載視圖層次結(jié)構(gòu)
? 用純代碼開發(fā)應(yīng)用程序時(shí)使用
? 功能和?Storyboard?&?XIB?是等價(jià)的
- (void)loadView {
_scrollView = [[UIScrollView alloc] init];
_scrollView.backgroundColor = [UIColor orangeColor];
self.view = _scrollView;
UIImageView *iv = [[UIImageView alloc] init];
[self.view addSubview:iv];
_imageView = iv;
}
3明刷、viewDidLoad 方法
? 視圖加載完成后執(zhí)行
? 可以做一些數(shù)據(jù)初始化的工作
? 如果用純代碼開發(fā)婴栽,不要在此方法中設(shè)置界面 UI
- (void)viewDidLoad {
[super viewDidLoad];
// 下載圖像
[self downloadImage];
}
4、下載網(wǎng)絡(luò)圖片
- (void)downloadImage{
// 1. 網(wǎng)絡(luò)圖片資源路徑
NSURL *url = [NSURL URLWithString:@"http://c.hiphotos.baidu.com/image/pic/item/4afbfbedab64034f42b14da1aec379310a551d1c.jpg"];
// 2. 從網(wǎng)絡(luò)資源路徑實(shí)例化二進(jìn)制數(shù)據(jù)(網(wǎng)絡(luò)訪問)
NSData *data = [NSData dataWithContentsOfURL:url];
// 3. 將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成圖像
UIImage *image = [UIImage imageWithData:data];
// 4. 設(shè)置圖像
self.image = image;
}
5辈末、設(shè)置圖片
- (void)setImage:(UIImage *)image {
// 1. 設(shè)置圖像視圖的圖像
self.imageView.image = image;
// 2. 按照?qǐng)D像大小設(shè)置圖像視圖的大小
[self.imageView sizeToFit];
// 3. 設(shè)置滾動(dòng)視圖的 contentSize
self.scrollView.contentSize = image.size;
}
6愚争、設(shè)置滾動(dòng)視圖的縮放
? 設(shè)置滾動(dòng)視圖縮放屬性
// 1> 最小縮放比例
self.scrollView.minimumZoomScale = 0.5;
// 2> 最大縮放比例
self.scrollView.maximumZoomScale = 2.0;
// 3> 設(shè)置代理
self.scrollView.delegate = self;
? 實(shí)現(xiàn)代理方法 - 告訴滾動(dòng)視圖縮放哪一個(gè)視圖
#pragma mark - UIScrollViewDelegate 代理方法
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
return self.imageView;
}
7、線程間通訊
? 在后臺(tái)線程下載圖像
[self performSelectorInBackground:@selector(downloadImage) withObject:nil];
? 在主線程設(shè)置圖像
// waitUntilDone:是否等待主線程執(zhí)行完畢 setImage:方法挤聘。
// YES:等待? NO:不等待
// 一般不用等待轰枝,直接設(shè)置 NO 即可
[self performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO];