V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
adow
V2EX  ›  iDev

我想用CoreAnimation做一个类似Flipboard那样的翻页效果,但是现在有一个问题搞不定所以想请教一下大家啊?

  •  
  •   adow ·
    adow · 2014-01-01 23:25:47 +08:00 · 3375 次点击
    这是一个创建于 3980 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我想做一个类似Flipboard那样的上下翻页的效果,我使用CoreAnimation,把屏幕分成上下两部分,各是一个CALayer,通过设置transform来实现翻转的效果。

    比如我现在按住屏幕下半部分的那个CALayer往上拖动的时候,根据拖动的距离来计算往上翻转的角度,设置transform,当我松开的时候,他会根据当前已经翻转的角度来继续下面的动画,如果翻转角度超过90度,那他会翻转到屏幕上半部分去(翻转完成了),也就是翻转到180度,如果没有超过90度,那就回到原来的位置,也就是0度(翻转没有完成),这个过程是一个动画,我使用CABasicAnimation来实现,设置fromValue和toValue就可以了。

    现在的问题是,假定我翻转没有超过90度(还是拖动屏幕下半部分的那个CALayer),松开的时候,这时应该一个动画使得这个CALayer回到0度的状态,如果这个动画的过程中(还为结束),我又想去拖动这个页面时,应该怎么办呢?(我开始时没想到过这个问题,理所当然的觉得应该是这个layer的动画完成后才可以继续操作的,后来我发现Flipboard的确是可以在翻页未完成的情况下继续拖动这个页面的,所有又很想实现他了)他应该停止当前那个动画,并从当前的这个角度来继续处理手指拖动的过程(重新计算角度)。那问题是,我如何停止当前的这个动画并且知道现在现在的翻转位置呢?我可以通过CALayer的removeAnimationForKey来停止动画,但是这个会直接变成动画结束的状态,也就是他会立刻使得这个CALayer变成CABasicAnimation中的toValue的那个位置,同时他也会触发CATransaction的completionBlock,而此时我又不知道这个调用是否是因为正常的动画完成的。

    我google了一下看到有人说CALayer的presentationLayer中的transform是会在动画播放过程中实时修改的,所以我在removeAnimationForKey之前先记录了他的transform,然后再给这个layer赋值当时的transform,可是感觉并不是这么回事。我想请教一下大家,要实现这样的效果应该如何来做呢?
    1 条回复    1970-01-01 08:00:00 +08:00
    doskoi
        1
    doskoi  
       2014-01-02 22:07:10 +08:00   ❤️ 1
    使用byValue从当前状态开始动画

    从Presentation Layer取当前状态

    设置speed为0 停止动画

    设置动画的fillMode控制结束状态
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.