zoukankan      html  css  js  c++  java
  • ios开发:如何加载大量图片 相册示例

    1. Create a NSOperationQueue to handle background downloading.

    NSOperationQueue *operationQueue = [[NSOperationQueue alloc]init];

    2. Now create an NSInvocationOperation for each image that you want to download and add it to operationQueue.

    int noOfImages = 500;
    for(int i = 0; i  noOfImages; i++)
    {
    NSInvocationOperation *invocationOperation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(loadDataAsychn:) object:i];
    [queue addOperation:invocationOperation];
    [operation release];
    }

    In this code, we have created an operation calling loadDataAsynchn: method which is to be implemented and added to queue. After adding created operation to the queue, it will do the rest of the downloading work for your app. You can add more operations to the same queue to be performed later.

    Now we will implement loadDataAsychn method.

    3. Implement loadDataAsychn method for loading data from the given URL, creating an image and setting it to desired placeholder.

    -(void)loadDataAsychn:(NSString*)imageNo
    {
    NSString *imgStr = [NSString stringWithFormat:@"http://192.168.0.163/Test/images/%@.jpg",imageNo];
    NSData *imageData=[[NSData alloc] initWithContentsOfURL: [NSURL URLWithString:imgStr]];
    UIImage *image=[[UIImage alloc]initWithData:imageData];
    [imgDict setValue:image forKey:@"image"];
    [imgDict setValue:imageNo forKey:@"imageNo"];
    [self performSelectorOnMainThread:@selector(showImg:) withObject:imgDict waitUntilDone:NO];
    }

    The loadDataAsychn method is used to download the information from a given URL and creating an image with downloaded data. As we all know that none of the UI related methods can be performed on background thread. So, in loadDataAsychn method, we call showImage method on the main thread to display images.

    4. We will now implement showImage which is responsible for updating UI.

    (void)showImage:(NSMutableDictionary *)Dict
    {
    int i = [[Dict objectForKey:@"imageNo"] intValue];
    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(320*(i-1), 0, 320, 460)];
    [imgView setImage:[Dict objectForKey:@"image"]];
    [myScrollView addSubview:imgView];
    }

    In this method, we create an UIImageView for displaying image, setting image on it and adding it to scroll-view dynamically.

    官方的相册程序示例  http://developer.apple.com/library/ios/#samplecode/PhotoScroller/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010080-Intro-DontLinkElementID_2

  • 相关阅读:
    12.2 ROS NavFn全局规划源码解读_2
    12.1 ROS NavFn全局规划源码_1
    12 ROS Movebase主体源码解读
    11 ROS 动态参数调节
    10. ROS costmap代价地图
    无人驾驶汽车1: 基于Frenet优化轨迹的无人车动作规划方法
    VC下加载JPG/GIF/PNG图片的两种方法
    vc++加载透明png图片方法-GDI+和CImage两种
    供CImage类显示的半透明PNG文件处理方法
    使用MFC CImage类绘制PNG图片时遇到的问题
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3134486.html
Copyright © 2011-2022 走看看