Я смотрел высоко и низко для решения этого, и я никуда не ушел.Нажатие анимационного изображения/кнопки
Я хочу разработать приложение для iOS, которое довольно простое нажатие, оживление и воспроизведение звука.
Итак, у меня была бы карта с названием фермы, и когда я нажму на овцу, она будет оживлять и издавать некоторый шум. Мне удалось добиться этого, и все это хорошо.
Моя проблема и вопрос - это возможность щелкнуть уже анимационную кнопку.
Поэтому, когда вид нагрузки я хотел бы иметь кнопки облака двигаться слева направо, в небе медленно, опять же, я уже достиг этого, используя этот код
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidLoad];
[UIView animateWithDuration:8.5
delay:1.0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut
animations:^{
cloudAnimate.center = CGPointMake(-100.0, 100.0);
}
completion:NULL];
}
НО, когда кнопки оживляющий из слева направо и назад они не являются кликабельными, поэтому прикосновение, которое я хочу для поворота облаков и воспроизведения звука, не работает. Я прочитал несколько других сообщений, которые говорят, что этого не может быть сделано, но у меня есть загрузка приложений на iPhone и iPad, которые делают это, чтобы кто-нибудь мог понять, как это можно достичь?
Любая помощь будет принята с благодарностью, поскольку я вытаскиваю волосы.
Заранее спасибо.
EDIT:
ИТАК благодаря комбинации ответов ниже я почти получил эту работу
Так я использую это, чтобы установить начальную CGPoint:
- (void)viewDidLoad
{
[super viewDidLoad];
// Move UIView
cloudAnimate.center = CGPointMake(400.0, 100.0);
}
И чтобы оживить облако слева направо, я использую тот же код, что и у меня изначально, с небольшой настройкой:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidLoad];
[UIView animateWithDuration:8.5
delay:1.0
options:UIViewAnimationOptionAutoreverse | UIViewAnimationOptionRepeat | UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction
animations:^{
cloudAnimate.center = CGPointMake(100.0, 100.0);
}
completion:NULL];
}
И теперь вместо IBAction Я использую это:
-(void) touchesBegan:(NSSet*) touches withEvent:(UIEvent *) event {
CGPoint point = [[touches anyObject] locationInView:self.view];
if([self.cloudAnimate.layer.presentationLayer hitTest:point]) {
SystemSoundID soundID;
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Super_Mario_Bros_Mushroom" ofType:@"mp3"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef) [NSURL fileURLWithPath:soundFile], & soundID);
AudioServicesPlaySystemSound(soundID);
cloudAnimate.imageView.animationImages = [NSArray arrayWithObjects:[UIImage imageNamed:@"panda-png-chewing"],[UIImage imageNamed:@"panda-png-happy"],nil];
cloudAnimate.imageView.animationDuration = 0.2;
cloudAnimate.imageView.animationRepeatCount = 6;
[cloudAnimate.imageView startAnimating];
}
}
Так что теперь это почти то, что я хочу, но если вы попали в облако, когда он находится на отделочном CGPoint (даже если он будет продолжать перемещение) приложение аварийно завершает работу. Если я ударил его, пока он движется, он звучит и оживляется.
У любого есть какие-либо предложения относительно того, почему это так?
вариант попробовать UIViewAnimationOptionAllowUserInteraction –
Прочтите мой ответ на этот вопрос (http://stackoverflow.com/questions/20367526/to-set-uianimation-and-touch-event-for-uiimageview/20367619#20367619), особенно часть после редактирования. – rdelmar