我有一个像上面一样的UIImageView图像,所以我要做的就是逐渐减少并增加图像的形状。
为了实现上述任务,显然我必须应用蒙版,所以我创建了一个圆形的CAShapeLayer并添加到UIImageView图层,如果我改变我的半径,它将只显示半径的图像量。
我的问题是如何应用动画,以便以动画形式显示。请指导我,我无法通过关键帧动画实现。
以下是屏蔽半径的代码。
// Set up the shape of the circle
int rChange = 0; // Its doing proper masking while changing this value
int radius = 123.5-rChange;
CAShapeLayer *circle = [CAShapeLayer layer];
// Make a circular shape
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0+rChange, 0+rChange, 2.0*radius, 2.0*radius)
cornerRadius:radius].CGPath;
// Configure the apperence of the circle
[circle setFillColor:[[UIColor blackColor] CGColor]];
[[self.originalImageView layer] setMask:circle];
self.originalImageView.layer.masksToBounds = YES;
其中123.5是图像的最大半径 和originalImageView是myUIImageView
答案 0 :(得分:4)
如果您只想显示一个带有动画变化半径的棕色圆圈,我建议进行两项更改:
不要打扰图像。只需使用CAShapeLayer
并将其fillColor
设置为棕色。
将图层的路径设置为一个宽度和高度为1磅的圆。然后使用CAShapeLayer
的{{1}}来改变大小。您可以为transform
。
例如,创建如下图层:
transform
circleLayer.position = CGPointMake(CGRectGetMidX(bounds),CGRectGetMidY(bounds));
CGRect bounds = self.view.bounds;
circleLayer = [CAShapeLayer layer];
circleLayer.fillColor = [UIColor brownColor].CGColor;
然后你可以像这样改变它的大小:
// Create a circle with 1-point width/height.
circleLayer.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 1, 1)].CGPath;
// Use the layer transform to scale the circle up to the size of the view.
[circleLayer setValue:@(bounds.size.width) forKeyPath:@"transform.scale"];
这将使用默认参数隐式(自动)设置大小更改的动画。如果要使用不同的动画参数,可以显式地为变换设置动画:
[circleLayer setValue:@(newSize) forKeyPath:@"transform.scale"];