我需要一个动画效果,类似于在按下按钮时小部分破坏按钮。有没有一种简单的方法可以用 Quartz 等来做到这一点?它的外观非常灵活。
1 回答
我会将您的按钮图像带入图形程序并准备不同版本的它,每个版本都有一个 Alpha 通道,全部被一小块遮挡,以这样的方式图案化,如果所有图像都堆叠起来,它们看起来像整个按钮。(为了更好的效果,你可以在“碎片”的边缘画一点,这样它们就有了一些造型。)
您需要对应该使用的文件格式进行一些研究。可能 png 是最好的,但 jpeg 也可以。
回到 Xcode,为每个“片段”制作 CALayers,并将您创建的图形文件设置为 CALayer 的内容。当需要制作“分解”动画时,将新的 CALayers 作为子层添加到视图层:
[self.view.layer addSublayer:layerPiece]; // do this for each layer
并为每一层创建一个 CAKeyframeAnimations 的 CAAnimationGroup——可能是 transform.translate、transform.rotation 和 opacity。你可以在那里找到例子。有用的提示:旋转必须以弧度为单位。您需要设置您的值以使图层旋转并彼此分开,并可能在最后淡出。下面是一个淡出动画的例子:
CAKeyframeAnimation *animFadeOut = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
animFadeOut.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0], nil];
animFadeOut.keyTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.4f], [NSNumber numberWithFloat:1.0f], nil];
最后,对于每一层,您可以像这样设置动画:
[layerPiece3 addAnimation:animGroup3 forKey:@"arbitraryAnimPropertyString"];
这是很多工作。或者,如果您可以访问 Adobe After Effects 之类的合成程序,则可以准备动画电影(仍然需要大量工作,但比盲目设置关键帧编号要容易得多),然后只需通过按钮播放即可。我没有在 iOS 中播放电影,但我假设您将其设置为 CALayer 的内容并将图层添加到视图以显示和播放电影。
理想情况下,您会使用 3D 软件对按钮进行建模、纹理和照明,使用粒子效果将其分开,渲染一个短片,然后将该片应用到图层。