我正在尝试旋转UIImageView360度,并在线查看了几个教程.我可以让他们都没有工作,没有UIView停止,或跳到一个新的位置.
我尝试过的最新事情是:
[UIView animateWithDuration:1.0
delay:0.0
options:0
animations:^{
imageToMove.transform = CGAffineTransformMakeRotation(M_PI);
}
completion:^(BOOL finished){
NSLog(@"Done!");
}];
Run Code Online (Sandbox Code Playgroud)
但是如果我使用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!");
}];
Run Code Online (Sandbox Code Playgroud)
也不起作用.它会转到180度数,暂停一瞬间,然后在重新0开始之前重新设置为度数.
是否可以在UIView动画进行过程中取消动画?或者我是否必须降至CA级别?
即我已经完成了这样的事情(也可能设置一个结束动画动作):
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:duration];
[UIView setAnimationCurve: UIViewAnimationCurveLinear];
// other animation properties
// set view properties
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
但是在动画完成之前我得到动画结束事件,我想取消它(剪短它).这可能吗?谷歌搜索周围发现一些人问同样的问题没有答案 - 一两个人推测它不能完成.
我想在UIView上执行透视变换(例如在coverflow中看到)
有谁知道这是否可能?
我已经调查过使用CALayer并且已经完成了所有实用的程序员Core Animation播客,但我仍然不清楚如何在iPhone上创建这种转换.
任何帮助,指针或示例代码片段将非常感谢!
在iPhone上设置动画视图过渡的最佳做法是什么?
例如,ViewTransitions来自apple 的示例项目使用如下代码:
CATransition *applicationLoadViewIn = [CATransition animation];
[applicationLoadViewIn setDuration:1];
[applicationLoadViewIn setType:kCATransitionReveal];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[[myview layer] addAnimation:applicationLoadViewIn forKey:kCATransitionReveal];
Run Code Online (Sandbox Code Playgroud)
但是网络上还有漂浮的代码片段,如下所示:
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.75];
[UIView setAnimationDelegate:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:myview cache:YES];
[myview removeFromSuperview];
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
什么是最好的方法?如果你也可以提供一个片段,那就非常感激了.
注意:我无法让第二种方法正常工作.
我的-drawInContext:方法中有一个包含一些复杂绘图代码的图层.我正在尝试最小化我需要做的绘图量,所以我使用-setNeedsDisplayInRect:仅更新已更改的部分.这是非常好的工作.但是,当图形系统更新我的图层时,它会使用交叉淡入淡出从旧图像过渡到新图像.我希望它能立即切换.
我已经尝试使用CATransaction来关闭操作并将持续时间设置为零,并且都不起作用.这是我正在使用的代码:
[CATransaction begin];
[CATransaction setDisableActions: YES];
[self setNeedsDisplayInRect: rect];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
我应该使用不同的CATransaction方法(我也尝试过-setValue:forKey:使用kCATransactionDisableActions,结果相同).
我正在将一个代码块从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();Run Code Online (Sandbox Code Playgroud)
renderInContext行
[captureView.layer renderInContext:pdfContext];Run Code Online (Sandbox Code Playgroud)
生成以下错误.
Automatic Reference Counting issue
Receiver type 'CALayer' for instance message is a forward declarationRun Code Online (Sandbox Code Playgroud)
有什么想法在这里发生了什么?
core-animation objective-c calayer ios automatic-ref-counting
我在iOS中很好地CALayer使用CGPath(QuadCurve)动画.但是我想使用一个比Apple 提供的更有趣的缓动功能(EaseIn/EaseOut等).例如,弹跳或弹性功能.
这些东西可以与MediaTimingFunction(bezier)一起使用:

但我想创建更复杂的计时功能.问题是媒体时间似乎需要一个立方贝塞尔,它不足以产生这些效果:
http://wiki.sparrow-framework.org/_media/manual/transitions.png
该代码创建上面是很简单的在其他框架中,这使得这个非常令人沮丧.请注意,曲线是将输入时间映射到输出时间(Tt曲线)而不是时间 - 位置曲线.例如,easeOutBounce(T)= t返回一个新的t.然后该t用于绘制运动(或任何我们应该动画的属性).
所以,我想创建一个复杂的自定义,CAMediaTimingFunction但我不知道如何做到这一点,或者甚至可能吗?还有其他选择吗?
编辑:
这是步骤的具体示例.很有教育意义
我想沿着从a点到b点的直线设置对象的动画,但我希望它使用上面的easeOutBounce曲线沿着直线"反弹"它的移动.这意味着它将遵循从a到b的精确线,但是将以比使用当前基于bezier的CAMediaTimingFunction更复杂的方式加速和减速.
让我们使用CGPath指定任意曲线移动.它应该仍然沿着该曲线移动,但它应该以与线示例中相同的方式加速和减速.
从理论上讲,我认为它应该像这样工作:
让我们将运动曲线描述为关键帧动画移动(t)= p,其中t是时间[0..1],p是在时间t计算的位置.因此,move(0)返回曲线开始处的位置,移动(0.5)精确中间并移动(1)结束.使用定时功能时间(T)= t来提供移动的t值应该给我想要的东西.对于弹跳效果,定时功能应该返回相同的时间(0.8)和时间(0.8)的t值(仅作为示例).只需更换计时功能即可获得不同的效果.
(是的,可以通过创建和连接来回的四个线段进行线条弹跳,但这不是必需的.毕竟,它只是一个简单的线性函数,它将时间值映射到位置.)
我希望我在这里有意义.
我遇到了一个问题,我有一系列重叠的CATransition/CAAnimation序列,所有这些都是我需要在动画停止时执行自定义操作,但我只需要一个dynamicDidStop的委托处理程序.
但是,我遇到了一个问题,似乎没有办法在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 animation];
[animation setType:kCATransitionFade];
[animation setSubtype:kCATransitionFromTop];
[animation setDelegate:self];
[hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
[animation setDuration:2.0];
[animation setValue:@"Throb" forKey:@"MyAnimationType"];
[[hearingAidHalo layer] addAnimation:animation forKey:nil];
}
Run Code Online (Sandbox Code Playgroud)
在animationDidStop委托中:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
if ([value isEqualToString:@"Throb"])
{
//... …Run Code Online (Sandbox Code Playgroud) 在调查内存泄漏时,我发现了一个与setRootViewController:在转换动画块中调用技术相关的问题:
[UIView transitionWithView:self.window
duration:0.5
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{ self.window.rootViewController = newController; }
completion:nil];
Run Code Online (Sandbox Code Playgroud)
如果旧视图控制器(正在替换的视图控制器)当前正在呈现另一个视图控制器,则上述代码不会从视图层次结构中删除呈现的视图.
也就是说,这一系列操作......
transitionWithView:使Z中的新根视图控制器...对用户看起来没问题,但Debug View Hierarchy工具将显示Y的视图仍然在Z的视图后面,在a UITransitionView.也就是说,在上面的三个步骤之后,视图层次结构是:
我怀疑这是一个问题,因为在转换时,X的视图实际上不是视图层次结构的一部分.
如果我dismissViewControllerAnimated:NO之前发送到X transitionWithView:,则生成的视图层次结构为:
如果我向dismissViewControllerAnimated:X 发送(是或否),然后在completion:块中执行转换,则视图层次结构正确.不幸的是,这会干扰动画.如果动画解雇,那就浪费时间; 如果没有动画,它看起来很破碎.
我正在尝试其他一些方法(例如,创建一个新的容器视图控制器类作为我的根视图控制器),但没有找到任何有效的方法.我会去的时候更新这个问题.
最终目标是直接从呈现视图转换到新的根视图控制器,而不会留下杂散视图层次结构.
我做了CALayer一个添加CATextLayer,文字出来模糊.在文档中,他们谈论"亚像素抗锯齿",但这对我来说并不重要.任何人都有一个代码片段,CATextLayer使用一些明确的文本?
以下是Apple文档中的文字:
注意:CATextLayer在渲染文本时禁用子像素抗锯齿.只有在光栅化的同时将文本合成到现有的不透明背景中时,才能使用子像素抗锯齿来绘制文本.在将背景像素编织成文本像素之前,无法单独绘制子像素抗锯齿文本,无论是图像还是图层.将图层的opacity属性设置为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
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:添加我实际使用的代码导致文本模糊.这是来自我发布的一个相关问题,即添加一个UILabel而不是一个CATextLayer但是得到一个黑盒子. http://stackoverflow.com/questions/3818676/adding-a-uilabels-layer-to-a-calayer-and-it-just-shows-black-box
CATextLayer* upperOperator = [[CATextLayer alloc] init];
CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
CGFloat components1[4] = {1.0, 1.0, …Run Code Online (Sandbox Code Playgroud) core-animation ×10
ios ×8
calayer ×4
cocoa-touch ×4
iphone ×4
uiview ×3
objective-c ×2
animation ×1
text ×1
tween ×1