【发布时间】:2019-04-23 22:48:49
【问题描述】:
我深入研究了核心动画并且在图层蒙版方面遇到了一些问题
出于学习原因,我尝试用透明的东西制作复杂的 UI 层
这个观点一个有,放到ViewController
public class TestView : UIView
{
public TestView()
{
Layer.Delegate = this;
Frame = new CGRect(100f,200f, 100f, 100f);
}
public override void LayoutSublayersOfLayer(CALayer layer)
{
base.LayoutSublayersOfLayer(layer);
var bounds = Bounds;
var circleFrame = new CGRect(20, 20, 60, 60);
var imageFrame = new CGRect(30, 30, 40, 40);
Layer.BorderWidth = 5;
Layer.BorderColor = UIColor.Red.CGColor;
Layer.CornerRadius = 4;
var gradientLayer = new CAGradientLayer();
gradientLayer.Colors = new[] { UIColor.Green.CGColor, UIColor.Red.CGColor };
gradientLayer.Frame = bounds;
Layer.AddSublayer(gradientLayer);
var maskOfGradientLayer = new CAShapeLayer();
var path = UIBezierPath.FromRoundedRect(circleFrame, 30);
path.UsesEvenOddFillRule = true;
maskOfGradientLayer.Path = path.CGPath;
maskOfGradientLayer.FillRule = CAShapeLayer.FillRuleEvenOdd;
maskOfGradientLayer.FillColor = UIColor.Black.CGColor;
maskOfGradientLayer.Frame = bounds;
gradientLayer.Mask = maskOfGradientLayer;
var maskOfMaskLayer = new CAShapeLayer();
maskOfMaskLayer.Frame = imageFrame;
maskOfMaskLayer.FillColor = UIColor.Black.CGColor;
maskOfMaskLayer.Contents = Bundles.ImageOff.CGImage;
Layer.AddSublayer(maskOfMaskLayer);
}
}
我有,这正是我想要的。
但我也希望可以使圆形透明而不是黑色。
我试着像这样maskOfGradientLayer.Mask = maskOfMaskLayer.
但是这样maskOfMaskLayer什么都不做!它不像面具必须做的那样工作。
我该怎么办?
【问题讨论】:
-
似乎,Core Animation 只支持设置掩码属性的一级深度
-
谁想知道更多。类似问题stackoverflow.com/questions/20132875/…
-
你测试
maskOfMaskLayer.FillColor = UIColor.clearColor.CGColor;而不是` maskOfMaskLayer.FillColor = UIColor.Black.CGColor;` ?? -
@mohsen 是的,我测试过。
标签: ios xamarin.ios core-animation