обнаружение касания в анимации 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);

}

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

любая помощь будет оценена по достоинству,

Крис


person ChrisM    schedule 26.10.2011    source источник
comment
Один из самых простых способов — создать UIButton пользовательского типа и добавить свое изображение в качестве фона кнопки. Затем вы можете добавить селектор к кнопке, чтобы она срабатывала при касании и т. д. Надеюсь, это поможет :)   -  person Luke    schedule 26.10.2011
comment
Привет, да, я попробовал это в первую очередь. Но это не совсем соответствовало тому, что я ищу. Потому что я хотел использовать touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event, чтобы увидеть, как долго пользователь может удерживать изображение. Наверняка должен быть способ получить доступ к положению изображения? Ваше здоровье,   -  person ChrisM    schedule 26.10.2011


Ответы (1)


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

[myImageView.layer presentationLayer]

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

person Simon Lee    schedule 26.10.2011