Chr*_*ris 3 core-animation objective-c ios
如果我创建一个仅显示背景颜色的CAShapeLayer,但如果我将内容设置为图像,则不显示任何内容.
CAShapeLayer* leftDot = [CAShapeLayer layer];
leftDot.opacity = 1.0;
leftDot.frame = CGRectMake(leftRef.CGPointValue.x, leftRef.CGPointValue.y, 2 * radius, 2 * radius);
leftDot.position = CGPointMake(leftRef.CGPointValue.x + 4, leftRef.CGPointValue.y + 4);
leftDot.cornerRadius = radius;
[leftDot setContents:[UIImage imageNamed: @"glow.png"]];
[self.layer addSublayer: leftDot];
Run Code Online (Sandbox Code Playgroud)
Par*_*ara 11
[注意:更新到Swift 2.2和Swift 3]
如CAShapeLayer类参考中所述,a CAShapeLayer用于使用自定义路径绘制形状.将图像设置为contents将被忽略.
如果您只想在图层中显示图像(假设您的文件已命名image.png),您可以使用a CALayer并设置其contents属性,以便它引用CGImage图像的表示形式:
Swift 2.2:
let layer = CALayer()
layer.contents = UIImage(named: "image")?.CGImage
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
let layer = CALayer()
layer.contents = UIImage(named: "image")?.cgImage
Run Code Online (Sandbox Code Playgroud)
由于OP专门询问CAShapeLayer,问题可能读作"如何使用图像将图像裁剪成特定形状CAShapeLayer?"
我建议您尝试两种解决方案:
1)掩蔽
创建法线CALayer并将图像设置为contents.然后CAShapeLayer使用您喜欢的路径创建一个并将其用作第一层mask.
Swift 2.2:
let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "image")?.CGImage // Assign your image
imageLayer.frame = ... // Define a frame
let maskPath = UIBezierPath(...) // Create your path
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.CGPath
imageLayer.mask = maskLayer // Set the mask
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
let imageLayer = CALayer()
imageLayer.contents = UIImage(named: "image")?.cgImage // Assign your image
imageLayer.frame = ... // Define a frame
let maskPath = UIBezierPath(...) // Create your path
let maskLayer = CAShapeLayer()
maskLayer.path = maskPath.cgPath
imageLayer.mask = maskLayer // Set the mask
Run Code Online (Sandbox Code Playgroud)
不要忘记设置正确的框架和路径,你应该能够达到你想要的效果.
2)填充颜色
CAShapeLayer使用您喜欢的路径创建一个,然后使用您的图像fillColor.
Swift 2.2:
let path = UIBezierPath(...) // Create your path
let layer = CAShapeLayer()
layer.path = path.CGPath
let image = UIImage(named: "image") // Assign your image
layer.fillColor = UIColor(patternImage: image!).CGColor
Run Code Online (Sandbox Code Playgroud)
斯威夫特3:
let path = UIBezierPath(...) // Create your path
let layer = CAShapeLayer()
layer.path = path.cgPath
let image = UIImage(named: "image") // Assign your image
layer.fillColor = UIColor(patternImage: image!).cgColor
Run Code Online (Sandbox Code Playgroud)
您可能最初会发现这种方法更容易,但控制图像填充形状的方式并非易事.
| 归档时间: |
|
| 查看次数: |
7639 次 |
| 最近记录: |