`

控件按照路径回落(类似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

分享到:
评论

相关推荐

    android小球自由落体弹跳动画效果的自定义控件

    bounce_count :小球弹跳次数 ball_color:小球颜色 ball_count:小球数量 ball_radius:小球半径 ball_delay:小球出现时间间隔(当小球数大于1时) anim_duration:小球一次动画时长 physic_mode : 开启物理效果(下落...

    仿appstore首页跳转效果.zip

    这允许我们控制视图控制器的出现和消失动画,从而实现与AppStore类似的页面切换效果。 7. **Page Control**: 为了指示当前屏幕位置,AppStore通常会使用UIPageControl。这是一个简单的控件,显示为一系列小圆点,...

    WPF控件 文件路径选择、文件夹选择

    与文件路径选择类似,我们可以使用`FolderBrowserDialog`控件。在XAML中,你可能不会直接声明这个控件,因为它是在代码-behind中使用的。以下是如何实现它的示例: ```csharp using System.Windows; using System....

    swift-react-native-app-store-review一个RN实现的AppStore评分组件

    标题中的“swift-react-native-app-store-review”指的是一个项目或库,它是用React Native框架实现的,目的是在iOS应用中提供类似Apple App Store的用户评分功能。React Native是一种由Facebook开发的开源...

    C#写的路径选择的控件

    - `VPathBox`控件可能会有一个`PathSelected`或类似的事件,当用户选择了一个新的路径并关闭对话框时触发,使得父窗体或其他订阅此事件的对象可以响应路径的变化。 - `Click`事件处理程序可能会负责打开文件选择...

    C#制作的控件交互动画插件

    在本文中,我们将深入探讨如何使用C#语言创建一个控件交互动画插件,以及该插件的主要功能和应用场景。C#是一种广泛应用于Windows桌面应用、游戏开发和Web服务的强大编程语言,其丰富的库和面向对象的特性使得创建...

    仿AppStore 获取应用按钮

    总的来说,"仿AppStore获取应用按钮"是一个结合了GDI+绘图技术和进度条功能的自定义控件,它的设计考虑了视觉效果和用户体验,是软件界面设计中一个实用且有创意的实践。通过理解其工作原理和使用方法,开发者可以在...

    App Inventor创意编程:软件的安装.pdf

    App Inventor 创意编程软件的安装和使用 App Inventor 是一个基于 Blocks 编程语言的可视化编程环境,它允许用户使用拖曳式编程来创建 Android 应用程序。下面是关于 App Inventor 软件的安装和使用的详细介绍。 ...

    金格控件未安装的解决方法.doc

    在IT领域,遇到“金格控件未安装”的问题时,通常意味着在使用特定软件或网页应用时,系统缺少必要的ActiveX控件支持,导致功能受限或无法正常使用。本文将详细解析这一问题,并提供解决方案,确保用户能够顺利运行...

    MFC动画控件的应用

    通过这个MFC动画控件的应用实例,我们可以学习到如何在MFC环境中集成和管理动画,提高软件的视觉吸引力。无论是在桌面应用程序还是嵌入式系统中,掌握这一技巧都能让你的程序更加生动活泼。实践是检验真理的唯一标准...

    C++Builder控件安装指南

    ### C++Builder控件安装指南 #### 一、概述 本文档旨在为用户提供关于如何在C++Builder中安装各类第三方控件的详细指导。通过这些控件,开发人员能够极大地扩展应用程序的功能,并提升用户界面的设计水平。根据...

    显示GIF动画的控件

    在BCB(Borland C++ Builder)环境中,显示GIF动画的功能可以通过安装特定的控件来实现。本篇文章将深入探讨如何在BCB中集成和使用这个控件,以及相关的编程技巧。 首先,GIF动画是一种流行的格式,它支持多帧图像...

    C#的环形动画进度控件

    C#,环形,动画,进度控件,C#的环形动画进度控件 C#,环形,动画,进度控件,C#的环形动画进度控件 C#,环形,动画,进度控件,C#的环形动画进度控件 C#,环形,动画,进度控件,C#的环形动画进度控件 C#,环形,动画,进度控件,C#的...

    CStatic 制作漫天繁星动画显示控件

    5. **按行显示**:描述中提到的“按行显示内容”可能是指星星的排列方式,可以是按照一定的网格或线条分布,或者是让星星按特定路径移动,形成类似流星雨的效果。 6. **优化性能**:大量绘制操作可能会降低性能,...

    WPF中Image控件Source属性的相对路径和绝对路径问题(经验总结)

    WPF 中 Image 控件 Source 属性的相对路径和绝对路径问题总结 在 WPF 中,Image 控件的 Source 属性可以指定为相对路径或绝对路径,但这两种路径有不同的使用场景和注意事项。本文将总结 WPF 中 Image 控件 Source ...

    labview控件4套+页面加载动画.rar

    在给定的“labview控件4套+页面加载动画.rar”资源中,包含了四套不同的LabVIEW控件和一个页面加载动画的示例,这些都旨在帮助开发者提升界面美观度、提高开发效率,并提供更好的用户体验。 1. **自定义控件**:在...

    安卓app开发项目-数字标识控件(源码).zip

    安卓app开发项目-数字标识控件(源码).zip安卓app开发项目-数字标识控件(源码).zip安卓app开发项目-数字标识控件(源码).zip安卓app开发项目-数字标识控件(源码).zip安卓app开发项目-数字标识控件(源码).zip安卓app...

    GIF动画显示控件

    很好用的纯代码GIF动画显示控件 =================================== 一款具有完整功能的显示GIF图片的开源控件,显示速度不错。...另外还支持远程网络位置显示GIF,类似一些加广告的软件中一些动画广告。

    超好用的纯代码GIF动画显示控件

    在IT领域,尤其是在软件开发中,GIF动画的显示是一个常见的需求。无论是Web应用、桌面应用还是移动应用,用户界面中经常需要展示动态效果来增强交互性和吸引力。本主题聚焦于一个特别的控件——“超好用的纯代码GIF...

    APP界面控件库

    APP界面控件库,主要用于Axure制作产品原型。简单。方便。快捷。

Global site tag (gtag.js) - Google Analytics