控件按照路径回落(类似Mac App store某软件的安装弹跳动画)
- (void)animateSnapshotOfView:(UIView *)view toTab:(UINavigationController *)navController { NSUInteger targetTabIndex = [self.tabBarController.viewControllers indexOfObject:navController]; NSUInteger tabCount = [self.tabBarController.tabBar.items count]; // AFAIK there's no API (as of iOS 4) to get the frame of a tab bar item, so guesstimate using the index and the tab bar frame. CGRect tabBarFrame = self.tabBarController.tabBar.frame; CGPoint targetPoint = CGPointMake((targetTabIndex + 0.5) * tabBarFrame.size.width / tabCount, CGRectGetMidY(tabBarFrame)); targetPoint = [self.window convertPoint:targetPoint fromView:self.tabBarController.tabBar.superview]; UIGraphicsBeginImageContext(view.frame.size); [view.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); CGRect frame = [self.window convertRect:view.frame fromView:view.superview]; CALayer *imageLayer = [CALayer layer]; imageLayer.contents = (id)image.CGImage; imageLayer.opaque = NO; imageLayer.opacity = 0; imageLayer.frame = frame; [self.window.layer insertSublayer:imageLayer above:self.tabBarController.view.layer]; CGMutablePathRef path = CGPathCreateMutable(); CGPoint startPoint = imageLayer.position; CGPathMoveToPoint(path, NULL, startPoint.x, startPoint.y); CGPathAddCurveToPoint(path,NULL, startPoint.x + 100, startPoint.y, targetPoint.x, targetPoint.y - 100, targetPoint.x, targetPoint.y); CAKeyframeAnimation *positionAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; positionAnimation.path = path; CGPathRelease(path); CABasicAnimation *sizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"]; sizeAnimation.fromValue = [NSValue valueWithCGSize:imageLayer.frame.size]; sizeAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(50, 50)]; CABasicAnimation *opacityAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"]; opacityAnimation.fromValue = [NSNumber numberWithFloat:0.75]; opacityAnimation.toValue = [NSNumber numberWithFloat:0]; CAAnimationGroup *animationGroup = [CAAnimationGroup animation]; animationGroup.animations = [NSArray arrayWithObjects:positionAnimation, sizeAnimation, opacityAnimation, nil]; animationGroup.duration = 1.0; animationGroup.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; animationGroup.delegate = self; [animationGroup setValue:imageLayer forKey:@"animatedImageLayer"]; [imageLayer addAnimation:animationGroup forKey:@"animateToTab"]; }
来源:http://stackoverflow.com/questions/6915702/creating-itunes-store-style-jump-animation
相关推荐
Micusd 2020-11-19
cheidou 2020-11-19
星马殇 2020-11-18
Echodat 2020-10-08
flyToSkyL 2020-09-11
zjc 2020-09-03
阳光普照 2020-09-01
十年砍柴 2020-08-30
猪猪侠喜欢躲猫猫 2020-08-17
ladewang 2020-08-17
渣渣灰 2020-08-13
blankt 2020-08-15
vickay 2020-08-09
TinyDolphin 2020-08-09
山兔与孟婆 2020-08-09
longjing 2020-08-07
xiaogoua 2020-08-06