2012-02-16 8 views
0

私はUIImageViewに表示するイメージを変更するメソッドを持っています。メソッドがUIImageView自体によって受け取られたタッチイベントからトリガされた場合でもうまく動作しますが、同じメソッドは、UIImageViewを、別のオブジェクトから呼び出された場合、タッチイベントをトリガしたものを更新することに失敗します。私は問題のメソッドでNSLog呼び出しを持っているので、メソッドが両方の場合に呼び出されることがわかります。しかし、あるケースでのみ、実際の画像の変化を見ることができます。それ以外の場合は、ビューが更新されません。 それが動作するとき、私はsetNeedsDisplayまたはsetNeedsLayoutを設定する必要はありませんが、それは私が問題を解決しようとしたものです。 UIImageViewとそのスーパービューでneedsDisplayとneedsLayoutを設定します。無駄に。私は、イメージが実際に変更されていることがわかります。デバイスを回転すると、リフレッシュが発生し、UIImageViewが実際に変更されたことがわかります。 makeObjectsPerformSelectorを使用してOutletCollection上:withObject:別のオブジェクトから呼び出されたときにUIImageが更新されない

スーパーは、メソッドを呼び出しeventAtLocation

それは必ず私の部分に恥ずかしい間違いのように見えますが、私は時間のため、それを把握することはできません。 > - フォームにswapImageが呼び出されるスーパーを(と呼ばれる:私は

はここで問題のコードです:-(何をしようとするアイデアが不足しています:

- (void)eventAtLocation:(NSValue *)location 
{ 
    CGPoint loc = [self.superview convertPoint:[location CGPointValue] toView:self]; 
    if ([self pointInside:loc withEvent:nil]) { 
     if (!self.isAnimating) { 
      [self autoSwapImage]; 
     } 
    } 
    else{ 
     if (self.isAnimating) { 
      [self cancelAnimation]; 
     } 
    } 
} 

- (void)cancelAnimation 
{ 
    self.isAnimating = NO; 
    [NSObject cancelPreviousPerformRequestsWithTarget:self]; 
} 

- (void) swapImage 
{ 
    currentImage++; 
    if (currentImage > numberOfImages) 
     currentImage = 1; 

    NSLog(@"set image to %i", currentImage); 
    self.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%i.jpg", currentImage]]; 
    [self setNeedsDisplay]; 
} 

- (void) autoSwapImage 
{ 
    self.isAnimating = YES; 
    [self swapImage]; 
    [self performSelector:@selector(autoSwapImage) withObject:self afterDelay:0.1]; 
} 

//次の作品は、しかしeventAtLocation場合NSLog出力)が表示されますが、ビューが更新されない - (ボイド)touchesBegan:(NSSet *)はwithEventに触れる:(たUIEvent *)イベント { // [自己autoSwapImage]; }

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    //[NSObject cancelPreviousPerformRequestsWithTarget:self]; 
} 
@end 

答えて

0

それをあなたが実際にUIImageViewのイメージを設定していないように見える、あなたはちょうどself.imageを設定しています。また、あなたはそれにチェックを入れたいと思うでしょう

self.myImageView.image = [UIImage imageNamed:[NSString stringWithFormat:@"img_%i.jpg", currentImage]]; 

ような何かをする必要がある[UIImage imageNamed:]実際に画像を返して、そのそのnilでありません。

UIImage* image = [UIImage imageNamed:@"someImage"]; 
if(!image){ 
    NSLog(@"%@",@"Image Not Found"); 
} 
+0

申し訳ありませんが、私はそれについて明確ではなかったことを、私は投稿のコードはUIImageViewのサブクラスであるので、self.imageはそのUIImageViewのイメージプロパティを設定する必要があり、そうではありませんか? –

+0

申し訳ありません新しい行のヒットリターンと間違ってコメントを送信しました... ...今このクラスの "自己"であるUIImageViewがないため、あなたの提案をテストする方法はわかりませんもちろん、UIImageViewプロパティ... また、このクラス内から呼び出すと動作します。再描画を強制するデバイスを回転させると、画像が実際に変更されたことがわかります。したがって、UIImageViewが更新されないという問題のみです。再描画を強制するには、setNeedsDisplay以外のものが必要です。 –

+0

偶然setImageまたはdrawRectをオーバーライドしましたか? –

関連する問題