2011-01-30 61 views
2

iOS 4.2でUIImageViewを動的に作成しようとすると、ヘッドデスクのポイントを達成しました。iPhoneで動的に作成されたUIImageViewsが表示されない

1)私が解放したiViewを解放しないの両方で試したセットアップ

UIImageView *iview = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 95, 149)]; 
iview.tag = 200; // see note 1 
iview.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin; 
[self.view addSubview:iview]; 
[iview release]; 

これは私のトラブルを引き起こしているコードです。

2)これは、簡潔なバージョンは私のために働いていなかったので、私は、見てよかを示すために拡張され

NSString *img = ...[see note 2]; 
NSLog(@"Filename: %@", img); 

UIImageView *pIV = (UIImageView *)[self.view viewWithTag:200]; 
if (pIV == nil) { 
    abort(); 
} 

UIImage *pI = [UIImage imageWithContentsOfFile:img]; 
if (pI == nil) { 
    abort(); 
} 
[pIV setImage:pI]; 

ペイオフ。

注1:上記のハードコード値(200、フレーム境界など)のほとんどは、いずれかの#defineであるか、のiView ALLOCコードが範囲内であることforloopで計算。簡潔さのために残しておきますが、あなたがそれが関連していると思ったら私に知らせてください。

注2:09:これはNSBundleに見た後にファイルパスを返すだけのメッセージである等のNSLog出力は

2011-01-30 22である54.767 Ribbitの[13529:207]ファイル名: /ユーザ/ RIP /ライブラリ/ Application Support/iPhoneシミュレータ/ 4.2 /アプリケーション/ C421AA9F-45BB-41AB-8CB0-1540FABB56D3/ribbit.app/cardfront_a7.png

の.pngが存在しない、との両方の歩哨nilではありません(したがって、abort()も発生しません)。

私はそれが基本的なものだと確信しています。私が試した

物事:UIImageViewを生成するために使用されるIB

1)。正しく配線されたら、フレームを見ることができ、IBでデフォルトとして与えられたイメージが示されました。しかし、私はまだ画像を変更することができませんでした。そのため、私は動的に作成しています...もっと簡単になると思いました。ええ。

2)は、各種のiViewのインスタンス変数を使用してみましたが、それは扱いにくいでした(生成されているこれらのUIImageViewの10がある)と、彼らはどちらか動作しませんでした。

3つのすべての試みは、同じ動作で失敗しましたので(正常に動作、画像だけを見ることができない)、私はそれだけでいくつかの愚かな小さなものであると仮定しています。

あなたのご提案があれば歓迎します。

+0

ようこそStackOverflow!よく書かれた質問の功績。システムが許可されているときに戻って、正しい答えを選択してください。 – Moshe

答えて

0

問題はsetImage(存在しなかった)とopaque = YESであるように見えました。

私はUIImageViewsをあらかじめ作成しておき、必要に応じて遅延画像をロードしていました。そのため、setImageは上記のコード例に含まれていませんでした。今、私は、それが動作しているようだ:

for (int i = 0; i < CARDS_AND_ARROWS; i++) { 
    float x = (float)(67 + ((95 + 22) * i)); 
    UIImageView *iview = [[UIImageView alloc] 
     initWithFrame:CGRectMake(x, 20.0f, 95.0f, 149.0f)]; 
    [iview setImage:[UIImage imageNamed:@"cardback_a.png"]]; 
    iview.opaque = YES; 
    iview.tag = UPPER_IMG_TAG_0+i; 
    iview.autoresizingMask = arm; 
    iview.hidden = NO; /* change to YES for distribution */ 
    [self addSubview:iview]; 
    [iview release]; 
} 

私はそれらを追加したいならば、カードが登場しました。問題はロードされていない/表示されていない可能性があります。むしろ、可視性の1つでした。

とにかく、fuggedaboutit。

関連する問題