Questions tagged «core-animation»

Core Animation是Apple的框架,用于在Mac和iOS设备上执行显示元素的硬件加速动画。有用的参考资料包括《核心动画编程指南》的动画类型和《时序编程指南》《核心动画食谱》

27
UIView 360度无限旋转动画?
我正在尝试旋转UIImageView360度,并在线查看了一些教程。如果没有UIView停止或跳到新的位置,我将无法让他们工作。 我该如何实现? 我尝试过的最新内容是: [UIView animateWithDuration:1.0 delay:0.0 options:0 animations:^{ imageToMove.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished){ NSLog(@"Done!"); }]; 但是,如果我使用2 * pi,它根本不会移动(因为它处于相同位置)。如果我尝试只进行pi(180度),则可以使用,但如果再次调用该方法,则它将向后旋转。 编辑: [UIView animateWithDuration:1.0 delay:0.0 options:0 animations:^{ [UIView setAnimationRepeatCount:HUGE_VALF]; [UIView setAnimationBeginsFromCurrentState:YES]; imageToMove.transform = CGAffineTransformMakeRotation(M_PI); } completion:^(BOOL finished){ NSLog(@"Done!"); }]; 也不起作用。它会升至180度数,暂停片刻,然后重设回0度数,然后再次开始。

17
取消UIView动画?
是否可以UIView在进行动画时取消动画?还是我必须降至CA级别? 即我做了这样的事情(也许也设置了结束动画动作): [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:duration]; [UIView setAnimationCurve: UIViewAnimationCurveLinear]; // other animation properties // set view properties [UIView commitAnimations]; 但是在动画完成之前,我得到了动画结束事件,我想取消它(简称它)。这可能吗?谷歌搜索发现有几个人问同样的问题而没有答案-一两个人猜测这是不可能完成的。

4
如何将透视变换应用于UIView?
我正在寻找对UIView执行透视转换(如Coverflow中所示) 有人知道这是否可能吗? 我调查了使用 CALayer所有实用的程序员Core Animation播客的并进行了遍历,但是我仍然不清楚如何在iPhone上创建这种转换。 任何帮助,指针或示例代码片段都将不胜感激!

8
iPhone UIView动画最佳做法
在iPhone上为视图过渡设置动画的最佳做法是什么? 例如,ViewTransitions苹果公司的示例项目使用如下代码: CATransition *applicationLoadViewIn = [CATransition animation]; [applicationLoadViewIn setDuration:1]; [applicationLoadViewIn setType:kCATransitionReveal]; [applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]]; [[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal]; 但是网上也有一些代码片段,看起来像这样: [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.75]; [UIView setAnimationDelegate:self]; [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES]; [myview removeFromSuperview]; [UIView commitAnimations]; 最好的方法是什么?如果您还可以提供摘要,将不胜感激。 注意:我一直无法获得第二种方法才能正常工作。

15
在-[CALayer setNeedsDisplayInRect:]中禁用隐式动画
我的-drawInContext:方法中有一个包含一些复杂绘图代码的层。我试图尽量减少需要做的绘图,所以我使用-setNeedsDisplayInRect:来仅更新已更改的零件。这很出色。但是,当图形系统更新我的图层时,它会使用淡入淡出功能从旧图像过渡到新图像。我希望它可以立即切换。 我尝试使用CATransaction关闭操作并将持续时间设置为零,但都无法正常工作。这是我正在使用的代码: [CATransaction begin]; [CATransaction setDisableActions: YES]; [self setNeedsDisplayInRect: rect]; [CATransaction commit]; 我应该改用CATransaction上的其他方法吗(我也尝试了-setValue:forKey:和kCATransactionDisableActions,结果相同)。

1
这里的“实例消息的接收者类型'CALayer'是转发声明”是什么意思?
我正在将代码块从iOS4项目移植到iOS5,但是ARC遇到了一些麻烦。该代码从屏幕截图生成PDF。 PDF生成代码 UIView *captureView; ... NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, captureView.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [captureView.layer renderInContext:pdfContext]; UIGraphicsEndPDFContext(); renderInContext行 [captureView.layer renderInContext:pdfContext]; 产生以下错误。 Automatic Reference Counting issue Receiver type 'CALayer' for instance message is a forward declaration 有什么想法吗?

6
如何使用Core Animation创建自定义缓动功能?
我在iOS中很好地CALayer为CGPath(QuadCurve)设置了动画。但是我想使用比Apple 提供的少数几个有趣的缓动功能(EaseIn / EaseOut等)。例如,反弹功能或弹性功能。 这些事情可能与MediaTimingFunction(贝塞尔曲线)有关: 但是我想创建更复杂的计时功能。问题在于媒体计时似乎需要一个三次方贝塞尔曲线,而这个贝塞尔曲线不够强大,无法产生以下效果: (来源:sparrow-framework.org) 该代码创建在其他框架上面是很简单的,这使得这个非常令人沮丧。请注意,这些曲线是将输入时间映射到输出时间(Tt曲线),而不是时间位置曲线。例如,easeOutBounce(T)= t返回新的t。然后,该t用于绘制运动(或我们应设置动画的任何属性)。 因此,我想创建一个复杂的自定义,CAMediaTimingFunction但我不知道如何执行此操作,或者是否有可能?有其他选择吗? 编辑: 这是步骤的具体示例。很有教育意义:) 我想沿着从点a到b的直线为对象设置动画,但是我希望它使用上面的easeOutBounce曲线沿其直线“反弹”其运动。这意味着它将遵循从a到b的精确线,但是将比使用当前基于贝塞尔的CAMediaTimingFunction可能的方式更加复杂地加速和减速。 让该线成为CGPath指定的任意曲线移动。它仍应沿该曲线移动,但应与直线示例相同的方式加速和减速。 从理论上讲,我认为它应该像这样工作: 让我们将运动曲线描述为关键帧动画move(t)= p,其中t是时间[0..1],p是在时间t计算的位置。因此,move(0)返回曲线起点的位置,move(0.5)精确地到达中间,而move(1)结束。使用时间函数time(T)= t提供t的移动值应该给我我想要的。为了产生弹跳效果,计时功能应针对time(0.8)和time(0.8)返回相同的t值(只是一个例子)。只需替换计时功能即可获得不同的效果。 (是的,可以通过创建和连接来回移动的四个线段来进行跳动,但这不是必须的。毕竟,它只是一个简单的线性函数,将时间值映射到位置。) 我希望我在这里有意义。

10
如何在animationDidStop委托中标识CAAnimation?
我遇到了一个问题,即我有一系列重叠的CATransition / CAAnimation序列,当动画停止时,所有这些序列都需要执行自定义操作,但是我只需要一个animationDidStop委托处理程序。 但是,我有一个问题,似乎没有一种方法可以唯一地标识animationDidStop委托中的每个CATransition / CAAnimation。 我通过作为CAAnimation的一部分公开的键/值系统解决了这个问题。 启动动画时,请使用CATransition / CAAnimation上的setValue方法来设置您的标识符和值,以在animationDidStop触发时使用: -(void)volumeControlFadeToOrange { CATransition* volumeControlAnimation = [CATransition animation]; [volumeControlAnimation setType:kCATransitionFade]; [volumeControlAnimation setSubtype:kCATransitionFromTop]; [volumeControlAnimation setDelegate:self]; [volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal]; volumeControlLevel.enabled = true; [volumeControlAnimation setDuration:0.7]; [volumeControlAnimation setValue:@"Special1" forKey:@"MyAnimationType"]; [[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil]; } - (void)throbUp { doThrobUp = true; CATransition *animation = [CATransition …

5
更改transitionWithView内的rootViewController时泄漏视图
在调查内存泄漏时,我发现了与setRootViewController:在过渡动画块内调用技术有关的问题: [UIView transitionWithView:self.window duration:0.5 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ self.window.rootViewController = newController; } completion:nil]; 如果旧的视图控制器(正在被替换的视图控制器)当前正在显示另一个视图控制器,则上面的代码不会从视图层次结构中删除显示的视图。 也就是说,这一系列操作... X成为Root View Controller X代表Y,因此Y的视图在屏幕上 使用transitionWithView:使Z中的新根视图控制器 ...看起来对用户来说还可以,但是Debug View Hierarchy工具将显示Y的视图仍在Z的视图之后,在A的内部UITransitionView。也就是说,经过上述三个步骤,视图层次结构为: UIWindow UITransitionView UIView(Y的视图) UIView(Z的视图) 我怀疑这是一个问题,因为在过渡时,X的视图实际上并不是视图层次结构的一部分。 如果我dismissViewControllerAnimated:NO在紧接之前发送给X transitionWithView:,则结果视图层次为: UIWindow UIView(X的视图) UIView(Z的视图) 如果我向dismissViewControllerAnimated:X 发送(是或否),然后在completion:块中执行转换,则视图层次结构正确。不幸的是,这会干扰动画。如果为解雇设置动画,则会浪费时间。如果不设置动画,它看起来就坏了。 我正在尝试其他方法(例如,使新的容器视图控制器类充当我的根视图控制器),但没有找到任何可行的方法。我将随时更新此问题。 最终目标是直接从呈现的视图过渡到新的根视图控制器,而不会留下杂散的视图层次结构。

7
如何使CATextLayer中的文本清晰可见
我CALayer添加CATextLayer了,文本变得模糊。在文档中,他们谈论“亚像素抗锯齿”,但这对我来说意义不大。任何人都有一个代码段,可以使一些CATextLayer清晰的文本成为? 以下是Apple文档中的文字: 注意:渲染文本时,CATextLayer禁用子像素抗锯齿。仅在对文本进行光栅化的同时将其合成到现有的不透明背景中时,才可以使用子像素抗锯齿来绘制文本。在让背景像素将文本像素编织到其中之前,无法单独将子像素抗锯齿的文本单独绘制到图像或图层中。将图层的不透明度属性设置为YES不会更改渲染模式。 第二句话意味着,如果将composites其合并为,则可以得到美观的文本。existing opaque background at the same time that it's rasterized. 那太好了,但是如何合成它,如何赋予它不透明的背景,以及如何对其进行光栅化? 他们在Kiosk菜单示例中使用的代码是这样的:(它是OS X,不是iOS,但我认为它可以工作!) NSInteger i; for (i=0;i<[names count];i++) { CATextLayer *menuItemLayer=[CATextLayer layer]; menuItemLayer.string=[self.names objectAtIndex:i]; menuItemLayer.font=@"Lucida-Grande"; menuItemLayer.fontSize=fontSize; menuItemLayer.foregroundColor=whiteColor; [menuItemLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMaxY relativeTo:@"superlayer" attribute:kCAConstraintMaxY offset:-(i*height+spacing+initialOffset)]]; [menuItemLayer addConstraint:[CAConstraint constraintWithAttribute:kCAConstraintMidX relativeTo:@"superlayer" attribute:kCAConstraintMidX]]; [self.menuLayer addSublayer:menuItemLayer]; } // end of for loop 谢谢! …


16
UIView摇动动画
我试图在按下按钮时摇晃UIView。 我正在修改在http://www.cimgf.com/2008/02/27/core-animation-tutorial-window-shake-effect/上找到的代码。 但是,通过尝试修改以下代码来摇晃UIView,它不起作用: - (void)animate { const int numberOfShakes = 8; const float durationOfShake = 0.5f; const float vigourOfShake = 0.1f; CAKeyframeAnimation *shakeAnimation = [CAKeyframeAnimation animation]; CGRect frame = lockView.frame; CGMutablePathRef shakePath = CGPathCreateMutable(); CGPathMoveToPoint(shakePath, NULL, CGRectGetMinX(frame), CGRectGetMinY(frame)); for (int index = 0; index < numberOfShakes; ++index) { CGPathAddLineToPoint(shakePath, NULL, …




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.