У меня есть следующий код:
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 над изображением шаблона в Swift 4
Это заставляет меня поверить, что есть ошибка с применением масок. Кто-нибудь может подтвердить?