обнаружение касания в анимации UIImageView

#objective-c #cocoa-touch #animation #uiimageview

#цель-c #cocoa-touch #Анимация #uiimageview uiimageview

Вопрос:

у меня есть изображение круга, которое обводит экран с помощью анимации контура. И я хочу определить, когда пользователь прикасается к движущемуся кругу. Однако, несмотря на то, что изображение движется по непрерывному кругу, его рамка по-прежнему находится в верхнем левом углу и не движется, как я могу обновить это, чтобы я мог обнаружить прикосновение к движущемуся изображению? Вот этот код…

Настройка анимации в viewDidLoad:

 //set up animation
CAKeyframeAnimation *pathAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];
pathAnimation.calculationMode = kCAAnimationPaced;
pathAnimation.fillMode = kCAFillModeForwards;
pathAnimation.removedOnCompletion = NO;
pathAnimation.duration = 10.0;
pathAnimation.repeatCount = 1000;
CGMutablePathRef curvedPath = CGPathCreateMutable();

//path as a circle
CGRect bounds = CGRectMake(60,170,200,200);
CGPathAddEllipseInRect(curvedPath, NULL, bounds);

//tell animation to use this path
pathAnimation.path = curvedPath;
CGPathRelease(curvedPath);

//add subview
circleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ball.png"]];    
[testView addSubview:circleView];

//animate
[circleView.layer addAnimation:pathAnimation forKey:@"moveTheSquare"];
 

Метод прикосновений:

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

    //detect touch
    UITouch *theTouch = [touches anyObject];

    //locate and assign touch location
    CGPoint startPoint = [theTouch locationInView:self.view];    
    CGFloat x = startPoint.x;
    CGFloat y = startPoint.y;

    //create touch point
    CGPoint touchPoint = CGPointMake(x, y);

    //check to see if the touch is in the rect    
    if (CGRectContainsPoint(circleView.bounds, touchPoint)) {       

        NSLog(@"yes");
    }

    //check image view position
    NSLog(@"frame x - %f, y - %f", circleView.frame.origin.x, circleView.frame.origin.y);
    NSLog(@"center x - %f, y - %f", circleView.center.x, circleView.center.y);
    NSLog(@"bounds x - %f, y - %f", circleView.bounds.origin.x, circleView.bounds.origin.y);

}
 

кажется, что imageview просто остается в верхнем левом углу. Кажется, я не могу понять, как распознать, был ли сделан сенсорный жест на движущемся шаре.

любая помощь будет признательна,

Крис

Комментарии:

1. Один из самых простых способов — создать UIButton типа custom и добавить свое изображение в качестве фона кнопки. Затем вы можете добавить селектор к кнопке, чтобы она срабатывала при прикосновении к ней и т.д. Надеюсь, это поможет 🙂

2. Привет, да, я действительно попробовал это в первую очередь. Но это не совсем соответствовало тому, к чему я стремлюсь. Потому что я хотел использовать «touchesMoved: (NSSet *)касания с событием: (UIEvent *) событие», чтобы увидеть, как долго пользователь может удерживать изображение. Конечно, должен быть способ получить доступ к положению изображения? Ваше здоровье,

Ответ №1:

Вам нужно запросить уровень представления представления, а не его фрейм. В ходе анимации будет обновляться только презентация…

 [myImageView.layer presentationLayer]
 

Получите доступ к свойствам этого слоя (происхождение, размер и т.д.) и определите, находится ли ваша точка касания в пределах границ.