标签: core-animation

你如何明确动画CALayer的backgroundColor动画?

我正在尝试构建一个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平台无关的方式)?

iphone macos cocoa core-animation

34
推荐指数
1
解决办法
2万
查看次数

链接核心动画动画

哪种是在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)

但它似乎没有工作..

cocoa core-animation objective-c

34
推荐指数
2
解决办法
2万
查看次数

Core Animation无法使用"alpha"值

在此代码之前,我的电影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不能做这样的简单任务?

alpha core-animation cabasicanimation ios

34
推荐指数
1
解决办法
1万
查看次数

在iOS 7中显示工作表/警报时,如何在自定义绘制的控件上将tintColor设置为灰色?

在iOS 7中,当UIActionSheet呈现a时,系统控制所有动画将它们设置tintColor为灰色.当纸张被解散时,它们会动画回来.

我有一些使用自定义背景图像或drawRect使用色调颜色的实现的控件,我希望它们像系统控件一样为该更改设置动画.

Apple添加- (void)tintColorDidChangeUIView,但是在这种方法中使用新颜色重新绘制并不会使更改生动 - 它只是立即从全彩切换到全灰色,当它周围的其他系统控件生成动画时看起来很糟糕.

如何使自定义绘制的控件tintColor像Apple一样动画转换?

iphone core-animation uikit ios ios7

34
推荐指数
3
解决办法
9383
查看次数

无法添加角半径和阴影

我正在尝试在图像上绘制阴影和角半径.我可以单独添加它们,但我无法同时添加这两种效果.我正在添加一个阴影:

[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

33
推荐指数
1
解决办法
2万
查看次数

用于iPad的Twitter中的纸张折叠/展开效果

Twitter for iPad实现了一种奇特的"缩小纸张折叠"效果.这是一个简短的视频片段. http://www.youtube.com/watch?v=B0TuPsNJ-XY

CATransform3D没有OpenGL 可以做到这一点吗?一个工作的例子将是感恩的.

更新:我对此动画效果的方法或实现感兴趣.这就是我在这个问题上提供赏金的原因 - srikar

animation core-animation objective-c ios

33
推荐指数
1
解决办法
1万
查看次数

UIView.animateWithDuration快速循环动画

在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)

core-animation uikit uiviewanimation ios swift

33
推荐指数
1
解决办法
4万
查看次数

如何为多个属性创建CABasicAnimation?

我有这个代码来动画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)

我的问题是,现在一切正常,我想同时使用同一元素的另一个属性.我见过你可以做添加动画和东西.

我的问题是:

  • 添加剂属性是最好/唯一的方法吗?(一次动画同一对象的多个属性)

谢谢!

animation core-animation caanimation ios

32
推荐指数
2
解决办法
2万
查看次数

利用核心动画伪造文本上的子像素抗锯齿

对于使用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:结果,上面的链接也是一个半身像.尽管链接的方法提供了亚像素抗锯齿,但它们在透明背景上也会失败.

cocoa text core-animation objective-c antialiasing

31
推荐指数
1
解决办法
4135
查看次数

如何更改CAGradientLayer色点?

现在我有一个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 ios cagradientlayer

31
推荐指数
1
解决办法
2万
查看次数