JerryCrowley
JerryCrowley

Reputation: 145

Animate image with gesture

I've created an animation of a plane moving along a bezier path. Is there a way to start the animation when a user swipes a certain direction? (i.e if the user pans right, the plane moves right along the path. if the user pans left, the plane moves left along the path).

Thanks for the help.

Upvotes: 1

Views: 107

Answers (1)

JerryCrowley
JerryCrowley

Reputation: 145

Curve Setup:

self.trackPath = [UIBezierPath bezierPath];
self.trackPath = [UIBezierPath bezierPathWithArcCenter:P(self.scrollView.center.x,self.scrollView.center.y-20)
                               radius:110
                           startAngle:DEGREES_TO_RADIANS(70)
                             endAngle:DEGREES_TO_RADIANS(115)
                            clockwise:NO];


self.plane = [CALayer layer];
self.plane.bounds = CGRectMake(0, 0, 60.0, 60.0);
self.plane.position = CGPointMake(self.scrollView.center.x,self.scrollView.center.y-20);
self.plane.contents = (id)([UIImage imageNamed:@"profile_tag"].CGImage);
[self.view.layer addSublayer:self.plane];

CAKeyframeAnimation *anim = [CAKeyframeAnimation animationWithKeyPath:@"position"];
anim.path = self.trackPath.CGPath;
anim.duration = 320.;
[self.plane addAnimation:anim forKey:nil];
self.plane.speed = 0.0;
self.plane.hidden = YES;

When Paging:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat pageWidth = self.scrollView.frame.size.width;
    int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.pageControl.currentPage = page;

    if((scrollView.contentOffset.x >= 320) && (scrollView.contentOffset.x<=640)){
        self.plane.hidden = NO;
        self.plane.timeOffset = scrollView.contentOffset.x - 320;
    }
}

Upvotes: 2

Related Questions