- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Mac 应用程序中有一个简单的动画设置,其中页面控件交换了一些 View 。我非常接近获得我想要的类似分页的动画,但是有一个小问题。分页工作正常,新页面动画正确到位,但新页面还替换了动画之前的初始页面。我希望最终被推出的 View 保持不变,而不是提前切换到新页面。 Here is a video showing the problem , 减慢到 3 秒的动画持续时间。这是代码:
UASourceView *previousSourceView = [self.sourceViewContainer.subviews objectAtIndex:0];
NSInteger previousIndex = [self.sourceViews indexOfObjectIdenticalTo:previousSourceView];
CATransition *pushTransition = [CATransition animation];
[pushTransition setType:kCATransitionPush];
[pushTransition setSubtype:(previousIndex < index) ? kCATransitionFromRight : kCATransitionFromLeft];
[pushTransition setDuration:PANEL_PAGE_SWIPE_ANIMATION_DURATION];
[pushTransition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[pushTransition setRemovedOnCompletion:YES];
[CATransaction begin];
[self.sourceViewContainer replaceSubview:previousSourceView with:sourceView];
[CATransaction commit];
[sourceView.layer addAnimation:pushTransition forKey:@"push"];
有一个固定的容器 View self.sourceViewContainer
可以在每个动画上替换一个新的 subview 。如上所示,问题是 previousSourceView
立即被 sourceView
替换 并且 也被插入。请帮我停止立即更换。我哪里错了?
*注意,添加iOS
标签是因为这段代码是平台无关的。
最佳答案
我使用 CAAnimationBlocks 解决了类似的问题(这是我对 original 的分支,作者已经朝着我不太关心的方向发展了)。
想法是将 removedOnCompletion
设置为 NO
并将 fillMode
设置为 kCAFillModeForwards
并执行实际的切换(没有动画)在完成 block 中。这仅在 OSX 下进行了测试(您可能需要针对 iOS 的不同解决方案,它已经支持完成 block )。
这是我的代码中的一个示例用法,它在棋盘上移动一个棋子,然后再返回:
CABasicAnimation *moveAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
moveAnimation.fromValue = [NSValue valueWithPoint:[self _pointForSquare:move.from()]];
moveAnimation.toValue = [NSValue valueWithPoint:[self _pointForSquare:move.to()]];
moveAnimation.duration = _animateSpeed / 1000.0;
moveAnimation.autoreverses = YES;
moveAnimation.removedOnCompletion = NO;
moveAnimation.fillMode = kCAFillModeForwards;
moveAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
moveAnimation.completion = ^(BOOL finished)
{
[pieceLayer removeAnimationForKey:@"movePiece"];
[self _setPieceLayer:pieceLayer toPiece:piece];
[pieceLayer setNeedsDisplay];
};
[pieceLayer addAnimation:moveAnimation forKey:@"movePiece"];
关于ios - CATransition 提前推送转换替换内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13302072/
出于某种原因,如果在添加 subview 后直接将动画添加到 subview 的图层,则 CATransition 将不会设置动画: transitionView = [[UIView alloc]
我正在使用一些最初取自 Apple 示例 ViewTransitions 的代码来相互交换两个 View 。 CATransition *animation = [CATransition anima
我有一个 UINavigationController。我将 VC1 设置为 rootViewController,并以编程方式从 VC1 加载 VC2,然后将自定义动画从 VC1 转到 VC2。标准
所以我最近才开始为 iPhone 开发一些简单的应用程序。我会说,我相当确定我对多 View 编程还没有深入的了解,但我正在努力学习。 我有一个程序,它最初是一个基于普通窗口的应用程序,因此我可以手写
CATransition 非常不寻常。考虑以下代码。 CATransition* trans=[CATransition animation]; trans.duration=0.5; trans.t
我正在尝试初始化 CATransition 实例,但 xCode 不断告诉我我正在使用未声明的标识符“CATransition”。您指的是“kCATransition”吗? 所讨论的行非常简单: CA
我在 Mac 应用程序中有一个简单的动画设置,其中页面控件交换了一些 View 。我非常接近获得我想要的类似分页的动画,但是有一个小问题。分页工作正常,新页面动画正确到位,但新页面还替换了动画之前的初
我在我的应用程序中使用 CATransition 动画,它工作正常,但有时会崩溃。 这是我的代码: -(void)_close_btn_click:(UIButton*)button { NSLo
我想用波纹过渡制作自定义segue。过渡有效,但没有波纹效果。这是我的代码 - (void)perform { // Add your own animation code here.
我正在两个 View Controller 上执行简单的从右到左的转换。动画效果完美,正是我想要的结果。但是,由于呈现/呈现的 View Controller 淡入/淡出,我在背景中看到黑色闪光。 我
我测试了 CATransition 字符串类型如下 @"suckEffect" @"spewEffect" @"genieEffect" @"unGenieEffect" @"rippleEffect
我有两个 View ,一个是aView,一个是bView,aView上有一个按钮,我点击按钮,我会跳转到bView,请看代码 -(IBAction)jump2b:(id)sender{ CATrans
可以延迟 CATransition 的动画吗?我尝试使用 startProgress 但它没有任何区别。 这就是我进行转换的方式: CATransition *animation = [CATrans
我正在尝试进行自定义转换以将 View Controller 插入堆栈。 我不知道是否有一种简单的方法可以将导航栏“锁定”在其位置上并在导航栏下进行转换。 我正在使用以下代码: CATransitio
获得了基本的 CATransition。作品。 animationKey = @"fadeIn"; [self.icon setImage:self.iconSelec
鉴于以下情况: let transition = CATransition() transition.duration = 0.5 transition.timingFunction
当我遇到这篇文章时,我正在研究 stackoverflow 试图找出如何在图层上制作 curl 动画:CATransition page curl from top 帖子的作者使用常量字符串 'pag
我有一个由五个 uiviewcontroller 组成的 uitabbarcontroller。 当我在第一个 uiviewcontroller 的 View 中点击一个按钮时,我希望 uiviewc
我正在尝试使 pushViewController 从左侧而不是右侧滑入,如下所示: Page14Controller * controller = [[Page14Controller alloc]
我正在开发一个应用程序,它在立方体上方显示四个 View ,您可以从右侧和左侧滑动滚动。我已经使用 CATransitions 轻松实现了这种交互,如下所示: [self.view1 addSubvi
我是一名优秀的程序员,十分优秀!