【发布时间】:2019-01-26 14:31:41
【问题描述】:
我想用另一个图层来遮罩 CALayer,我想在每次绘制调用中不断更改其帧从而制作动画。是否可以在每次绘制调用中更改遮罩层的框架而不是制作新的遮罩层?
【问题讨论】:
标签: uikit core-animation calayer cashapelayer
我想用另一个图层来遮罩 CALayer,我想在每次绘制调用中不断更改其帧从而制作动画。是否可以在每次绘制调用中更改遮罩层的框架而不是制作新的遮罩层?
【问题讨论】:
标签: uikit core-animation calayer cashapelayer
试试下面的代码。此代码将在 macOS 的 Cocoa App 上运行。如果您要使用 Cocoa Touch for iOS,请相应地更改课程。我希望这对你有用。
// ViewController.h
@interface ViewController : NSViewController{
CALayer * maskLayer;
CALayer * Layer;
}
// ViewController.m
@implementation 视图控制器
-(void)viewDidLoad{
[super viewDidLoad];
maskLayer = [CALayer layer];
Layer = [CALayer layer];
Layer.backgroundColor = [[NSColor blueColor] CGColor];
Layer.frame = CGRectMake(20, 20, 720, 900);
Layer.contents = [NSImage imageNamed:@"bg1"];
maskLayer.frame = CGRectMake(20, 20, 720, 900);
maskLayer.opacity = 0.5;
[maskLayer mask];
maskLayer.contents = [NSImage imageNamed:@"bg"];
[self.view.layer addSublayer:Layer];
[self.view.layer addSublayer:maskLayer];
[self maskLayerAnimation];
}
-(void)maskLayerAnimation{
[CATransaction begin];
CABasicAnimation* fadeAnim = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeAnim.fromValue = [NSNumber numberWithFloat:1.0];
fadeAnim.toValue = [NSNumber numberWithFloat:0.0];
fadeAnim.duration = 5.0;
[CATransaction setCompletionBlock:^{
NSLog(@"animation completed");
maskLayer.frame = CGRectMake(20, 20, 720, 700);
maskLayer.contents = [NSImage imageNamed:@"bg2"];
}];;
[maskLayer addAnimation:fadeAnim forKey:@"opacity"];
[CATransaction commit];
}
【讨论】: