【发布时间】:2021-03-20 18:34:24
【问题描述】:
我有以下代码:
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
var gradient = new CAGradientLayer();
gradient.Frame = view.Bounds;
gradient.Colors = colors;
var mask = new CALayer();
mask.Frame = view.Bounds;
mask.Contents = view.Image.CGImage;
mask.ContentsGravity = CALayer.GravityCenter;
gradient.Mask = mask;
view.Layer.AddSublayer(gradient);
}
“view”是一个完美居中的 UIImageView。
数字“1”正好在中间。在这里你可以看到蒙版没有完全居中。
这里的图片是来自标准资源的心形图标,它不是自定义图片。 (例如,如果在按钮中使用,那么它会完美居中)。
在发布之前,在设置框架和边界时,我已经尝试了所有可能的组合,但蒙版总是偏离中心几个像素。
其他人在这里报告了类似的问题,但没有解决方案:Gradient Color over Template Image in Swift 4
这让我相信蒙版的应用方式存在错误。谁能确认一下?
【问题讨论】:
-
“遮罩的应用方式存在错误” 没有。相信我。
-
@matt 这样的简单代码怎么会产生不正确的结果呢?即使使用了 CALayer.GravityCenter ,看起来面具也没有居中。或者这里有一些关于如何设置 Frames 的极端情况?
-
您没有显示足够的代码来重现该问题,甚至没有解释您要做什么,因此无法提供进一步的帮助。我只是说,除非您首先假设 您 犯了错误,否则您不会弄清楚这一点。
-
@matt 唯一的另一件事是带有居中 UIImageView 和居中标签的故事板。我不确定我是否可以将它上传到这里的某个地方。
-
例如,您可能正在等效于 viewDidLoad 执行此操作。但这为时过早,没有已知的帧。正如我所说,没有足够的代码和明确的目标,问题是没有意义的。
标签: ios xamarin xamarin.ios