@eXhausted

Как узнать текущую картинку в анимированом UIImageView?

Допустим есть что-то вроде баннера. UIImageView, в нем 4 картинки анимировано меняются. По нажатию на каждую из них должно происходить определенное дейстие. Как в — (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event узнать на какую из картинок тапнул юзер?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    if([event touchesForView:self.imageView])
    {
        NSLog(@"kartinku potrogali^^");
        UITouch *eventTouch = [[event touchesForView:self.imageView] anyObject];
        if ([eventTouch.view isKindOfClass:[UIImageView class]])
        {
            UIImageView *imageViewFromEvent = (UIImageView *)eventTouch.view;
        }
    }
}



При выполнении такого кода в imageViewFromEvent.image nil. Так же как и в IB UIImageView nil.


Подскажите чего-нибудь :)


Спасибо.
  • Вопрос задан
  • 2791 просмотр
Пригласить эксперта
Ответы на вопрос 4
SAKrisT
@SAKrisT
Попробуйте взять контент из CALayer, вот так imageViewFromEvent.layer.contents
Ответ написан
No_Time
@No_Time
Сам сталкивался с такой траблой. Проблема решилась вот так: stackoverflow.com/questions/5536915/fetching-image-from-animating-uiimageview
Ответ написан
Krypt
@Krypt
Хм…
Создать свой контрол не проще будет? Потомок от UIView, в котором по запущенному NSTimer (в NSRunLoopCommonModes запихнуть не забудьте, а то спец эффекты будут) меняются картинки в положенном внутрь UIImageView, либо сами UIImageView?
Ответ написан
Комментировать
usgleb
@usgleb
Если хотите реализовывать через touchesBegan и получить кучу мусора в одном месте, то можно так:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint touchLocation = [touch locationInView:self.view];
    if (CGRectContainsPoint(image1.frame, touchLocation))
    {
        NSLog(@"Tap to image1");
     }
    if (CGRectContainsPoint(image2.frame, touchLocation))
    {
        NSLog(@"Tap to image2");
    }
}


А иначе пишите свой контрол, как советует Вам выше Krypt. Я считаю, что последний вариант более приемлем.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы