`

iOS动画实现:弹簧效果

阅读更多
原帖地址:http://www.cnblogs.com/shangdahao/archive/2013/06/04/3116731.html

源码地址:https://github.com/thermogl/TISpringLoadedViews,


这个比较复杂,我写了个简化版的:


https://www.dropbox.com/s/sv3yhm8dovh0adq/SpringDemo.zip



- (void)simulateSpringWithDisplayLink:(CADisplayLink *)displayLink {

if (springEnabled && !self.panning){
CGPoint displacement
= CGPointMake(self.center.x - restCenter.x,
self.center.y
- restCenter.y);
//控件收到的力
CGPoint kx = CGPointMake(springConstant * displacement.x, springConstant * displacement.y);
//控件受到的阻力
CGPoint bv = CGPointMake(dampingCoefficient * velocity.x, dampingCoefficient * velocity.y);
//加速度
CGPoint acceleration = CGPointMake((kx.x + bv.x) / mass, (kx.y + bv.y) / mass);

velocity.x
-= (acceleration.x * displayLink.duration);
velocity.y
-= (acceleration.y * displayLink.duration);

//设置控件新位置
CGPoint newCenter = self.center;
newCenter.x
+= (velocity.x * displayLink.duration);
newCenter.y
+= (velocity.y * displayLink.duration);
[self setCenter:newCenter];
}
}


这个方法由CADisplayLink负责调用,每秒钟默认60次。要看懂这段代码,首先你要了解弹簧的原理,比如拉起弹簧收到的力怎么计算,往回弹收到的阻力怎么计算。


 


下面是手势操作的代码,也就是拖动时触发的方法:



- (void)viewWasPanned:(UIPanGestureRecognizer *)sender {

CGPoint translation
= CGPointApplyAffineTransform([sender translationInView:self.superview], CGAffineTransformMakeScale(panDragCoefficient, panDragCoefficient));
CGPoint translatedCenter
= CGPointMake(self.center.x + translation.x, self.center.y + translation.y);

if (translation.x > 0 && (translatedCenter.x - restCenter.x) > panDistanceLimits.right){
translation.x
-= (translatedCenter.x - restCenter.x) - panDistanceLimits.right;
}
else if (translation.x < 0 && (restCenter.x - translatedCenter.x) > panDistanceLimits.left){
translation.x
+= (restCenter.x - translatedCenter.x) - panDistanceLimits.left;
}

if (translation.y > 0 && (translatedCenter.y - restCenter.y) > panDistanceLimits.bottom){
translation.y
-= (translatedCenter.y - restCenter.y) - panDistanceLimits.bottom;
}
else if (translation.y < 0 && (restCenter.y - translatedCenter.y) > panDistanceLimits.top){
translation.y
+= (restCenter.y - translatedCenter.y) - panDistanceLimits.top;
}

[self setCenter:CGPointMake(self.center.x
+ translation.x, self.center.y + translation.y)];
[sender setTranslation:CGPointZero inView:self.superview];
}


 

本文链接

分享到:
评论

相关推荐

    iOS开发之弹簧效果的动画

    本教程将深入探讨如何在iOS应用中实现弹簧效果的动画,这种效果通常用于模拟真实世界中的弹性运动,如按钮按下、页面滑动等场景。苹果的UIKit框架提供了一种强大的工具——Core Animation,可以轻松实现此类动画。 ...

    仿ios页面弹簧效果

    通过深入研究“SpringScrollView-master”项目,开发者不仅可以学习到如何在非iOS平台上实现弹簧效果,还能理解动画原理、自定义视图组件以及事件处理等方面的知识,从而提升自己的移动应用开发技能。

    ios-UIView添加弹簧效果.zip

    总之,"ios-UIView添加弹簧效果.zip"包含了一个使用iOS UIKit实现的弹簧动画示例,它涵盖了自定义UIView、添加动画效果、显示文本内容以及控制动画执行次数等知识点。对于想要提升应用动画质量的iOS开发者来说,这是...

    ios各种动画效果

    本文将对iOS中的各种动画效果进行详细的总结,并探讨实现这些效果的不同途径。 首先,我们来看iOS中最基础的动画类型:Core Animation。Core Animation是Apple提供的一套强大的2D图形渲染和动画框架,它允许开发者...

    ios动画效果

    以下是关于“ios动画效果”的详细知识点: 1. **Core Animation**: iOS中的动画主要基于Core Animation框架,这是一个底层技术,负责处理2D图形渲染。通过Core Animation,开发者可以创建平滑、高性能的动画,包括...

    下拉列表弹簧动画

    在iOS开发中,为了提供更好的用户体验,开发者们经常会在用户交互时添加各种动画效果,其中“下拉列表弹簧动画”是一种常见的动态效果,它模仿了真实世界中的物理弹性,为界面增加了一种生动且自然的感觉。这个动画...

    仿ios弹簧效果,带阻尼,和回弹渐慢动画

    android 仿ios 弹簧效果,带阻尼

    iOS tableview头部弹簧效果

    通过以上步骤,你就可以在自己的应用中实现类似“iOS tableview头部弹簧效果”的功能。CDTableViewHeaderDemo这个压缩包文件很可能是包含了实现这一效果的示例代码,你可以下载并学习其中的实现方式。

    iOS动画-animation1

    "iOS动画-animation1"可能是一个关于如何在iOS应用中创建和使用基本动画的教程或项目示例。在这里,我们将深入探讨iOS动画的基础知识,包括Core Animation、UIView动画以及CAAnimation的相关概念。 1. **Core ...

    iOS Core Animation:Advanced Techniques.zip

    学习关键帧动画、弹簧动画和路径动画的实现方法。 3. **时间线与速度控制**:掌握如何自定义动画的时间曲线,使用CADisplayLink和CAAnimationGroup来精确控制动画的播放速度和同步。 4. **图层合成**:学习如何...

    IOS动画效果

    8. **Spring动画**:iOS中的Spring动画模拟了真实世界中弹簧的物理效果,提供了一种平滑且自然的回弹动画。通过设置spring的阻尼和初始速度,可以创建各种不同的回弹效果。 9. **CAReplicatorLayer**:这个图层可以...

    实用,易用的 iOS 动画集合库.zip

    《Swift中的iOS动画集合库——Spring深度解析》 在iOS应用开发中,动画效果往往能够提升用户体验,使得交互更加生动有趣。"实用,易用的 iOS 动画集合库.zip" 提供了一个名为Spring的开源项目,专为Swift开发者设计...

    swift-iOS动画库的精选列表

    "swift-iOS动画库的精选列表"是一个汇集了优秀Swift动画库的资源集合,旨在帮助开发者们在项目中引入高质量的动画效果。 首先,我们要了解Swift中的动画基础。Swift内置了UIKit框架,其中`UIView`类包含了基本的...

    ios 动画 时钟 波浪

    "ios 动画 时钟 波浪"这个主题涉及了三个核心概念:iOS平台上的动画实现、时钟动画以及波浪效果。下面将详细阐述这三个方面的知识。 首先,我们来探讨iOS中的动画。iOS提供了两种主要的动画实现方式:Core ...

    iOS必学:iOS Core Animation (Adanced Techniques) - English.pdf.zip

    在iOS开发中,Core Animation是苹果提供的一项强大的技术,用于创建复杂的动画效果和图形渲染。这份资源"iOS Core Animation (Advanced Techniques) - English.pdf.zip"显然是一部关于Core Animation高级技术的英文...

    iOS动画小demo

    本教程以"iOS动画小demo"为主题,将深入探讨如何在iOS应用中实现简单且实用的动画,尤其是如何在UITableView的Cell中添加动画效果,以及如何在用户交互下控制动画的展示。 首先,我们要了解iOS中的动画基本原理。...

    Android-类似 iOS 带弹簧效果的左右滑动控件

    在Android开发中,为了提供与iOS类似的用户体验,开发者经常需要实现一些特定的动画效果,比如弹簧效果的左右滑动交互。这个"Android-类似 iOS 带弹簧效果的左右滑动控件"就是一个专为此目的设计的库,它可以被集成...

    iOS CGAffineTransform 实现抽屉动画

    在iOS开发中,实现抽屉动画通常用于创建滑动式导航菜单或侧边栏效果,让用户可以像拉开抽屉一样从屏幕边缘滑出一个视图。`CGAffineTransform`是Core Graphics框架的一部分,它允许开发者对 UIView 或CALayer进行平移...

    awesome-ios-animation:iOS动画存储库的集合

    "awesome-ios-animation" 是一个专门收集iOS动画相关资源的存储库,为开发者提供了丰富的动画实现示例和库。这个存储库的目标是帮助iOS开发者更好地理解和运用动画技术,提升应用程序的视觉效果。 首先,我们来探讨...

Global site tag (gtag.js) - Google Analytics