Я использую XCode 4.5.1.UITapGestureRecognizer не запускается на UIImageView, созданный программно
Я добавил <UIGestureRecognizerDelegate>
в файл .h и в начале .m файл
@interface FirstViewController()
@property (nonatomic, strong) UIImageView *img1;
@end
Тогда в viewDidLoad
, создавая UIImageView
программно как
self.img1 = [[UIImageView alloc] initWithFrame:CGRectMake(50, -30, 44, 44)];
[self.img1 setImage:[UIImage imageNamed:@"image1.png"]];
[self.img1 setAlpha:0.8];
[self.img1 setHidden:NO];
[self.img1 setUserInteractionEnabled:YES];
[self.img1 setTag:901];
А потом
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
tap.delegate = self;
[self.img1 addGestureRecognizer:tap];
[self.view addSubview:self.img1];
[self.view bringSubviewToFront:self.img1];
и в конце
- (void)guessTapObject:(UITapGestureRecognizer *) gesture
{
// guessing the image
UIImageView *tapImageView = (UIImageView*) gesture.view;
NSLog(@"Gesture Tag: %d", tapImageView.tag);
}
У меня есть 4 разных изображения и их создание программно, как описано выше. И применение анимации для перемещения их сверху вниз.
Я хочу, чтобы при нажатии пользователем на изображении он должен анимироваться и исчезать (я знаю этот код). Но код не вызывает событие переключения. Я положил точку останова на начало функции guessTapObject
, но не уходил туда никогда.
В объявлении UITapGestureRecognizer
, отладка показывает, что guessTapObject
прикреплен к распознавателю для выполнения действия крана.
Пожалуйста, помогите, почему событие нажатия не запускает его селекторный метод ???
Спасибо за вашу помощь заранее.
Отредактировано: я также попытался с для цикла, чтобы иметь жест распознаватель отдельно для каждого ImageView
for (UIView * view in self.view.subviews) {
if (view.tag > 900){
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(guessTapObject:)];
tap.numberOfTapsRequired = 1;
tap.numberOfTouchesRequired = 1;
// tap.delegate = self;
[view addGestureRecognizer:tap];
NSLog(@"tapView: %@", tap.view);
NSLog(@"tap: %i", tap.enabled);
}
}
Я пробовал код, который вы отправили, и он отлично работает для меня. Я получаю обратный вызов. Если вы используете несколько изображений, вам нужно создать другой UITapGestureRecognizer. Для одного изображения код должен работать нормально, пожалуйста, проверьте, нет ли ничего, или код генерации не вызван или что-то еще. – Amit
Это работает, убедитесь, что изображение вы нажимаете, когда вы устанавливаете его на -30, проверьте это. –
@ amit3117 .... Я попытался использовать for loop, чтобы добавить отдельный gesturerecognizer для каждого изображения, но не работает с моей стороны. – eagle