我正在尝试构建一个CABasicAnimation来动画Core Animation CALayer的backgroundColor属性,但我无法弄清楚如何正确地包装CGColorRef值以传递给动画.例如:
CGColorSpaceRef rgbColorspace = CGColorSpaceCreateDeviceRGB();
CGFloat values[4] = {1.0, 0.0, 0.0, 1.0};
CGColorRef red = CGColorCreate(rgbColorspace, values);
CGColorSpaceRelease(rgbColorspace);
CABasicAnimation *selectionAnimation = [CABasicAnimation animationWithKeyPath:@"backgroundColor"];
[selectionAnimation setDuration:0.5f];
[selectionAnimation setToValue:[NSValue valueWithPointer:red]];
[layer addAnimation:selectionAnimation forKey:@"selectionAnimation"];
Run Code Online (Sandbox Code Playgroud)
似乎对backgroundColor属性没有任何作用,我假设因为将它作为包裹在NSValue中的指针移交它不是传递它的方法.
backgroundColor是CALayer的一个可动画属性,所以我的问题是:如何设置此特定属性的From或To值(最好是以Mac/iPhone平台无关的方式)?
哪种是在Core Animation上下文中链接动画的最优雅和模块化的方式?
我的意思是做动画,当其他完成时开始(例如,改变position然后opacity)..正常的方法是直接改变属性:
layer.position = new_point;
layer.opacity = 0.0f;
Run Code Online (Sandbox Code Playgroud)
但这会同时做到这一点.我想让一个等待另一个.
那么为不同的对象链接动画呢?我读过关于CATransaction使用过的东西:
[CATransaction begin]
layer1.property = new_property;
[CATransaction begin]
layer2.property2 = new_property2;
[CATransaction commit];
[CATransaction commit];
Run Code Online (Sandbox Code Playgroud)
但它似乎没有工作..
在此代码之前,我的电影pic alpha设置为0,
CABasicAnimation* fadein= [CABasicAnimation animationWithKeyPath:@"alpha"];
[fadein setToValue:[NSNumber numberWithFloat:1.0]];
[fadein setDuration:0.5];
[[moviepic layer]addAnimation:fadein forKey:@"alpha"];
Run Code Online (Sandbox Code Playgroud)
没有任何事情发生,如果我事先将alpha设置为0.5,则alpha保持为0.5而不是动画为1.
我已经看过使用的代码UIView beginAnimations:了,但是我正在教核心动画,所以我想知道为什么CABasicAnimation不能做这样的简单任务?
在iOS 7中,当UIActionSheet呈现a时,系统控制所有动画将它们设置tintColor为灰色.当纸张被解散时,它们会动画回来.
我有一些使用自定义背景图像或drawRect使用色调颜色的实现的控件,我希望它们像系统控件一样为该更改设置动画.
Apple添加- (void)tintColorDidChange了UIView,但是在这种方法中使用新颜色重新绘制并不会使更改生动 - 它只是立即从全彩切换到全灰色,当它周围的其他系统控件生成动画时看起来很糟糕.
如何使自定义绘制的控件tintColor像Apple一样动画转换?
我正在尝试在图像上绘制阴影和角半径.我可以单独添加它们,但我无法同时添加这两种效果.我正在添加一个阴影:
[layer setShadowOffset:CGSizeMake(0, 3)];
[layer setShadowOpacity:0.4];
[layer setShadowRadius:3.0f];
[layer setShouldRasterize:YES];
Run Code Online (Sandbox Code Playgroud)
这里,layer是UIView子类的CALayer.所以每当我设置时这都有用
[layer setMasksToBounds:NO];
Run Code Online (Sandbox Code Playgroud)
现在添加角半径我这样做:
[layer setCornerRadius:7.0f];
Run Code Online (Sandbox Code Playgroud)
但我需要将MasksToBounds设置为YES才能使其正常工作:
[layer setMasksToBounds:YES];
Run Code Online (Sandbox Code Playgroud)
无论如何我可以添加这两种效果吗?
谢谢你的时间,
丹尼斯
iphone core-animation core-graphics objective-c quartz-graphics
Twitter for iPad实现了一种奇特的"缩小纸张折叠"效果.这是一个简短的视频片段. http://www.youtube.com/watch?v=B0TuPsNJ-XY
CATransform3D没有OpenGL 可以做到这一点吗?一个工作的例子将是感恩的.
更新:我对此动画效果的方法或实现感兴趣.这就是我在这个问题上提供赏金的原因 - srikar
在ViewController.Swift中,我设法从一个点到另一个点创建一个框.我认为循环这很容易,所以框会动画到一个点,然后动画回到原来的位置,然后再循环.我已设法将对象移动到一个位置并在"完成"中再次将其移回,但这并不会使我循环.怎么能实现这一目标?
我想也许这可行,但老实说我不知道:
let boxmoves = [CGRect(x: 120, y: 220, width: 100, height: 100), CGRect(x: 120, y: 120, width: 100, height: 100)]
for boxmove in boxmoves {
coloredSquare.frame = boxmove
}
Run Code Online (Sandbox Code Playgroud)
我怎么能根据设备宽度将它居中(我假设涉及一些数学?)?
我的代码:
let coloredSquare = UIView()
coloredSquare.backgroundColor = UIColor.blueColor()
coloredSquare.frame = CGRect(x: 120, y: 120, width: 100, height: 100)
self.view.addSubview(coloredSquare)
// found repeate but this will not animate as I want.
//UIView.animateWithDuration(2.0, delay: 0.2, options: UIViewAnimationOptions.Repeat, animations: {
UIView.animateWithDuration(2.0, animations: {
coloredSquare.frame = CGRect(x: 120, y: 220, width: 100, height: …Run Code Online (Sandbox Code Playgroud) 我有这个代码来动画CALayer元素.
CABasicAnimation *makeBiggerAnim=[CABasicAnimation animationWithKeyPath:@"radius"];
makeBiggerAnim.duration=0.2;
makeBiggerAnim.fromValue=[NSNumber numberWithDouble:20.0];
makeBiggerAnim.toValue=[NSNumber numberWithDouble:40.0];
makeBiggerAnim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
Run Code Online (Sandbox Code Playgroud)
我的问题是,现在一切正常,我想同时使用同一元素的另一个属性.我见过你可以做添加动画和东西.
我的问题是:
谢谢!
对于使用Core Animation图层支持视图的项目工作的任何人来说,遗憾的是,对于未在预先设置的不透明背景上呈现的文本,禁用了子像素抗锯齿(文本平滑).现在,对于能够为其文本设置不透明背景的人(通过setBackgroundColor:调用或Interface Builder中的等效设置),此问题不会出现太多问题.但对于其他人来说,绝对没有办法解决它,这不是一个人们无法忽视的事情.
我已经在网上寻找了两天以上的解决方案,并没有任何可用的东西出现.我想要做的就是创建一个在工作表窗口上设置的文本标签(不是用户可编辑的)(工作表窗口背景是透明的,因此将工作表的内容视图声明wantsLayer为true会禁用窗口上所有标签的文本平滑); 非常简单.我已经看到很多有争议的解决方案(快速谷歌搜索将在许多其他地方提出这个主题),但到目前为止,所有这些解决方案依赖于人们能够并愿意与不透明的背景妥协(你不能在一张纸上使用).
到目前为止,我可以想象的最佳方向是将文本预渲染到文本平滑到图像上,然后像往常一样在图层支持的视图上显示图像.但是,这似乎不可能.我认为可以尝试的"正常"方式是:
NSAttributedString *string = [[self cell] attributedStringValue];
NSImage *textImage = [[NSImage alloc] initWithSize:[string size]];
[textImage lockFocus];
[string drawAtPoint:NSZeroPoint];
[textImage unlockFocus];
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用(很可能是因为调用时drawRect:,图形上下文设置已禁用文本平滑 - 关闭子像素抗锯齿,而使用常规抗锯齿),但更多涉及的解决方案也没有找到这个问题(你在哪里创建自己的图形上下文).
那么如何做这样的事情呢?你能以某种方式"伪造"文本平滑的效果吗?是否有甚至黑客攻击的解决方案可以设置一些东西?我真的不想因为这个愚蠢的问题而放弃核心动画; 它有很多好处,可以节省大量的时间和代码.
编辑:经过大量搜索,我找到了一些东西.虽然线程本身只是重申了我的怀疑,但我想我可能已经找到了解决这个问题的方法:自定义CALayer绘图.Timothy Wood在他的一篇回复中附上了一个示例项目,该项目使用几种技术显示字体平滑,其中一些技术起作用.我会考虑将它集成到我的项目中.
编辑#2:结果,上面的链接也是一个半身像.尽管链接的方法提供了亚像素抗锯齿,但它们在透明背景上也会失败.
现在我有一个GA Gradient图层,我设置颜色,但我想将颜色点设置为(而不是顶部中心,左上角)和底部(而不是底部中心到右下角) )只是为了改变一点.思考?下面是我到目前为止的代码......我包含了核心动画,因为我是颜色之间的动画.
- (id)init {
self = [super init];
UIView *gradientView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.w, self.h)];
[self addSubview:gradientView];
[self sendSubviewToBack:gradientView];
topColor = [UIColor colorWithRed:0.012 green:0.012 blue:0.012 alpha:1];
bottomColor = [UIColor colorWithRed:1.000 green:0.765 blue:0.235 alpha:1];
gradient = [CAGradientLayer layer];
gradient.frame = gradientView.frame;
gradient.colors = [NSArray arrayWithObjects:(id)topColor.CGColor, (id)bottomColor.CGColor, nil];
gradient.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f], [NSNumber numberWithFloat:0.7], nil];
[gradientView.layer addSublayer:gradient];
[self performSelector:@selector(animateColors) withObject:self afterDelay:2.0];
currentColorCount = 1;
return self;
}
Run Code Online (Sandbox Code Playgroud)
在左边(我有什么)在左边(我想要的)

core-animation ×10
ios ×6
objective-c ×4
cocoa ×3
iphone ×3
animation ×2
uikit ×2
alpha ×1
antialiasing ×1
caanimation ×1
ios7 ×1
macos ×1
swift ×1
text ×1