0

我是目标 c 和 Xcode 的新手。我发现这段代码允许我从一个 url 将图像加载到我的设备中,并将其替换为我在与包含此代码的类关联的视图中拥有的一个。现在我需要在同一个类中加载两个图像,以替换在同一个视图中的两个图像...我该怎么办?

编辑:要清楚:我有一个包含两个图像视图的视图。每个图像视图都显示包含在应用程序资源中具有特定名称的文件中的图像。假设第一个图像视图包含“image1.jpg”和第二个“image2.jpg”。我想要做的是将两个图像“image1.jpg”和“image2.jpg”替换为从网络上获取的两个图像(为了在应用程序期间最终更新一些应用程序图像)生活中使用了 xml,等等)。

- (void)loadImgFromURLString: (NSString *)theUrlString{
    NSLog(@"Downloading image...");
    backgroundHome.image = nil;    

    NSURLRequest *request = [NSURLRequest requestWithURL:
                        [NSURL URLWithString:theUrlString]
                         cachePolicy:NSURLRequestReturnCacheDataElseLoad
                        timeoutInterval:30.0];
    connection = [[NSURLConnection alloc]
              initWithRequest:request delegate:self];
 }

 - (void)connection:(NSURLConnection *)theConnection
     didReceiveData:(NSData *)incrementalData {
    if (data == nil)
        data = [[NSMutableData alloc] initWithCapacity:2048];

    [data appendData:incrementalData];
 }

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection{
    backgroundHome.image = [UIImage imageWithData:data];
    NSLog(@"Image ready...");

    // save image in document dir
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *pngFilePath = [NSString stringWithFormat:@"%@/test.png",docDir];
    [data writeToFile:pngFilePath atomically:YES];
}
4

2 回答 2

1

我想在视图中添加第二张图像不是真正的问题?

如果有多个,您的要求是将加载的数据分配给适当的图像。

您可以将此代码添加到 UIImageView 的子类中。这样做每个 UIImageView 都会创建自己的请求并接收自己的图像数据。最终你将它分配给 self.image = ...

这就是我会做的。

备选方案:您创建一个引用 UIImageView 的图像加载器类。其中您创建两个实例。每个实例都“知道”自己的 UIImageView 并发出请求,最终将图像数据保存到自己的 UIImageView。

下一个替代方案(我从未尝试过)

NSMutableDictionary ongoingRequests = [[NSMutableDictionary alloc] init];

- (void)loadImgFromURLString: (NSString *)theUrlString forImageView:(UIImageView)theView {
    backgroundHome.image = nil;    

    NSURLRequest *request = [NSURLRequest requestWithURL:
                        [NSURL URLWithString:theUrlString]
                         cachePolicy:NSURLRequestReturnCacheDataElseLoad
                        timeoutInterval:30.0];
    connection = [[NSURLConnection alloc]
              initWithRequest:request delegate:self];

    [self.ongoingRequests setObject:theView forKey:connection]
 }

[...]

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection{
    UIImageView *theView = [self.ongoingRequests objectWithKey:theConnection]
    theView.image = [UIImage imageWithData:data];
    self.ongoingRequests removeObjectForKey:theConnection;

    // save image in document dir
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/test.png",docDir];
[data writeToFile:pngFilePath atomically:YES];
}
于 2013-01-23T16:38:29.620 回答
0

在主视图中创建两个子视图。

在它们上加载图像,并根据需要进行操作。

这对你来说会更容易。

于 2013-01-23T16:28:16.163 回答