Событие UITouch на анимированном UIImagevIew - PullRequest
0 голосов
/ 09 декабря 2011

Я использую пример кода Snowfall, который сбрасывает UImages с верхней части экрана.Я хочу обнаружить Touch на UIImageview и обновить ярлык.Если я создаю один UIImageView в IBOutlet и подключаю его к событию касания, метка обновляется правильно.Но когда я пытаюсь применить его к падающему UIImageView, он не работает.Вот что у меня пока так:

    - (void)viewDidLoad {
     [super viewDidLoad];

     score = 0;
     self.view.backgroundColor = [UIColor colorWithRed:0.5 green:0.5 blue:1.0 alpha:1.0];
     flakeImage = [UIImage imageNamed:@"flake.png"];

     [NSTimer scheduledTimerWithTimeInterval:(0.5) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}

- (void)onTimer
{

    flakeView = [[UIImageView alloc] initWithImage:flakeImage];
    flakeView.opaque = YES;
    flakeView.userInteractionEnabled = YES;
    flakeView.multipleTouchEnabled = YES;

     int startX = round(random() % 320);
     int endX = round(random() % 320);

     double scale = 1 / round(random() % 100) + 1.0;
     double speed = 1 / round(random() % 100) + 1.0;

     flakeView.frame = CGRectMake(startX, -100.0, 25.0 * scale, 25.0 * scale);

     [self.view addSubview:flakeView];
     [self.view bringSubviewToFront:flakeView];

     [UIView beginAnimations:nil context:flakeView];
     [UIView setAnimationDuration:5 * speed];

     flakeView.frame = CGRectMake(endX, 500.0, 25.0 * scale, 25.0 * scale);

     [UIView setAnimationDidStopSelector:@selector(onAnimationComplete:finished:context:)];
     [UIView setAnimationDelegate:self];
     [UIView commitAnimations];     
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    UITouch *touch = [touches anyObject];
    if ([touch view] == flakeView)
    {
        NSLog(@"tag %@",touch);
        score = score + 1;
        lbl1.text = [NSString stringWithFormat:@"%i", score];        
    }
}

1 Ответ

1 голос
/ 09 декабря 2011

Анимации обычно отключают обработку касаний, поэтому вы должны использовать:

 animateWithDuration:delay:options:animations:completion

, чтобы установить параметры для получения касаний.

http://developer.apple.com/library/IOs/#documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html#//apple_ref/doc/uid/TP40009503-CH6-SW1

IIRC, который вам нужен, это: UIViewAnimationOptionAllowUserInteraction Найдите UIViewAnimationOptions в приведенном выше документе для полного списка.

...