0

リュウが触れられたときだけアニメートするようにして、チュートリアルを拡張しようとしています。ただ、タッチも登録されておらず、サブビューと関係があると思います。これが私のコードです:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
 UITouch *touch = [touches anyObject];

 if([touch view] == ryuView){
  NSLog(@"Touch");
 } else {
  NSLog(@"No touch");
 }
}

-(void) ryuAnims{
 NSArray *imageArray = [[NSArray alloc] initWithObjects:
         [UIImage imageNamed:@"1.png"],
         [UIImage imageNamed:@"2.png"],
         [UIImage imageNamed:@"3.png"],
         [UIImage imageNamed:@"4.png"],
         [UIImage imageNamed:@"5.png"],
         [UIImage imageNamed:@"6.png"],
         [UIImage imageNamed:@"7.png"],
         [UIImage imageNamed:@"8.png"],
         [UIImage imageNamed:@"9.png"],
         [UIImage imageNamed:@"10.png"],
         [UIImage imageNamed:@"11.png"],
         [UIImage imageNamed:@"12.png"],
         nil];

 ryuView.animationImages = imageArray;
 ryuView.animationDuration = 1.1;
 [ryuView startAnimating];


}



-(void)viewDidLoad {
       [super viewDidLoad];

       UIImageView *image = [[UIImageView alloc] initWithFrame:
        CGRectMake(100, 125, 150, 130)];
 ryuView = image;


 ryuView.image = [UIImage imageNamed:@"1.png"];
 ryuView.contentMode = UIViewContentModeBottomLeft; 
 [self.view addSubview:ryuView];
        [image release];
}

このコードは正常にコンパイルされますが、ryuをタッチまたはクリックしても、何も起こりません。私も試しました

if([touch view] == ryuView.image) 

しかし、それは私にこのエラーを与えます:「異なるObjective-Cタイプの比較'structUIImage*'と'structUIView*'にはキャストがありません。」私は何が間違っているのですか?

4

2 に答える 2

1

UIViewタッチ イベントを受信するように設定されていますか?

ryuView.userInteractionEnabled = YES;
于 2010-03-31T21:44:25.530 に答える
0

touchesBeganUIViewクラスのメソッドであり、 UIView (またはあなたの場合はUIImageView ) のサブクラスに実装する必要があります。アニメーション ブロックを実装する外部クラスではありません。

そのため、RyuImageViewなどのUIImageViewのサブクラスを作成し、touchesBeganメソッドを実装するようにしてください。次に、ryuView がタッチされたことをアニメーション ブロックでオブジェクトに通知する必要があります。これにはデリゲートメソッドを使用できます。回答を参照してください Xcode:画像に触れると画像を変更する方法(同じ位置)? サンプルとして。

はい、UIImageView の このプロパティのデフォルト値はNOであるため、UIImageView のuserInteractionEnabledYESに設定します。

RyuImageView の initWith... メソッドのいずれかで実行します。

self.userInteractionEnabled = YES;

またはアニメーションブロッククラスで:

 ryuView.userInteractionEnabled = YES;
于 2010-03-31T22:23:30.440 に答える