Как мне проверить, не трогают ли мое подпредставление? - PullRequest
0 голосов
/ 01 апреля 2010

Я пытался расширить учебник, пытаясь оживить Рю только тогда, когда к нему прикоснулись.Тем не менее, касание даже не регистрируется, и я считаю, что это как-то связано с тем, что это подпредставление.Вот мой код:

-(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];
}

Этот код прекрасно компилируется, однако при касании или нажатии на рю ничего не происходит.Я также пробовал

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

, но это дает мне такую ​​ошибку: «Сравнение различных типов Objective C« struct UIImage * »и« struct UIView * »не содержит приведение».Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 01 апреля 2010

Настроен ли UIView для приема сенсорных событий вообще?

ryuView.userInteractionEnabled = YES;
0 голосов
/ 01 апреля 2010

touchesBegan - это метод класса UIView , и он должен быть реализован в подклассе UIView (или UIImageView в вашем случае ). Не в каком-то внешнем классе, где вы реализуете блок анимации!

Поэтому убедитесь, что вы создали подкласс UIImageView , например. RyuImageView и реализуйте метод touchsBegan . Затем вы должны сообщить своему объекту с помощью блока анимации, что ryuView был затронут. Вы можете использовать метод делегата для этого. См. Ответ Xcode: Как изменить изображение при прикосновении к изображению (в той же позиции)? как образец.

И да, установите UIImageView userInteractionEnabled в ДА , поскольку значение по умолчанию этого свойства UIImageView НЕТ

сделать это либо в методе initWith ... RyuImageView:

self.userInteractionEnabled = YES;

или в вашем классе блоков анимации:

 ryuView.userInteractionEnabled = YES;
...