0

私はObjectiveCとXcodeの初心者です。このコードを見つけたので、URLからデバイスに画像を読み込んで、このコードを含むクラスに関連付けられたビューにある画像に置き換えることができます。置き換えるには、同じクラスに2つの画像を読み込む必要があります。同じビューにある2つの画像...どうすればよいですか?

編集:明確にするために:私は2つの画像ビューを含むビューを持っています。各画像ビューには、アプリリソースに含まれる特定の名前を持つファイルに含まれる画像が表示されます。最初の画像ビューに「image1.jpg」と2番目の「image2.jpg」が含まれているとします。私がやろうとしているのは、2つの画像「image1.jpg」と「image2.jpg」をウェブから取得した2つの画像に置き換えることです(一部のアプリ画像の更新のために、最終的にアプリ中に実行されます)人生は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

ビューに 2 番目の画像を追加することは、本当の問題ではないと思いますか?

あなたの挑戦は、ロードされたデータが複数ある場合、適切な画像に割り当てることです。

このコードを UIImageView のサブクラスに追加できます。そうすることで、各 UIImageView は独自のリクエストを作成し、独自の画像データを受け取ります。最終的にそれを self.image = ... に割り当てます。

それが私がすることです。

別の方法: UIImageView への参照を持つイメージ ローダー クラスを作成します。これらのうち、2 つのインスタンスを作成します。各インスタンスは独自の 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

メイン ビュー内に 2 つのサブビューを作成します。

それらに画像をロードし、必要に応じて操作します。

これはあなたにとってより簡単になります。

于 2013-01-23T16:28:16.163 に答える