zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    POJ
    luogu- P1373 小a和uim之大逃离 DP 四维,其中一维记录差值
    牛客国庆集训派对Day3 B Tree(树形dp + 组合计数)
    【CF 1059C】 Sequence Transformation 数学
    POJ
    牛客国庆集训派对Day6 A Birthday 费用流
    Treap + 无旋转Treap 学习笔记
    牛客2018国庆集训派对Day3 I Metropolis 多源最短路径
    Gym
    CodeForces
  • 原文地址:https://www.cnblogs.com/daomul/p/4454528.html
Copyright © 2011-2022 走看看