Но я также хочу сделать прозрачный кружок вместо черного цвета.
Solution Exploration Version:
Вы также можете использовать UIBezierPath , чтобы нарисовать то, что вы хотите, и установить maskOfMaskLayer
:
var maskOfMaskLayer = new CAShapeLayer();
maskOfMaskLayer.Frame = imageFrame;
maskOfMaskLayer.FillColor = UIColor.Black.CGColor;
maskOfMaskLayer.Contents = Bundles.ImageOff.CGImage;
Layer.AddSublayer(maskOfMaskLayer);
Код обновления помечен следующим:
UIBezierPath offCirclePath = new UIBezierPath();
// draw an arc
offCirclePath.AddArc(new CGPoint(50, 50), circleFrame.Width / 3, (nfloat)(1.75 * Math.PI), (nfloat)(1.25 * Math.PI), true);
//draw a line
offCirclePath.MoveTo(new CGPoint(50, 30));
offCirclePath.AddLineTo(new CGPoint(50, 45));
//set to maskOfMaskLayer
var maskOfMaskLayer = new CAShapeLayer();
maskOfMaskLayer.FillColor = UIColor.Clear.CGColor;
maskOfMaskLayer.Path = offCirclePath.CGPath;
maskOfMaskLayer.LineWidth = 5;
maskOfMaskLayer.StrokeColor = UIColor.White.CGColor;
maskOfMaskLayer.LineCap = new NSString("round");
Layer.AddSublayer(maskOfMaskLayer);
Другой код не изменился.
Но я с самого начала задумывался о настройке любого настраиваемого изображения.
Решение второе: (Неправильное направление)
Я проверил, что CAShapeLayer
не может иметь эту функцию для изменения цвета с изображения. CAShapeLayer Class
Однако я обнаружил, UIImageView
может сделать это. Есть свойство TintColor
этого свойства. Это свойство из UiView. Свойство UIView.TintColor .
var maskOfMaskLayer = new CAShapeLayer();
maskOfMaskLayer.Frame = imageFrame;
maskOfMaskLayer.FillColor = UIColor.Black.CGColor;
maskOfMaskLayer.Contents = Bundles.ImageOff.CGImage;
Layer.AddSublayer(maskOfMaskLayer);
Изменить на:
UIImageView imageView = new UIImageView();
imageView.Frame = imageFrame;
imageView.Image = Bundles.ImageOff;
imageView.TintColor = UIColor.White;
AddSubview(imageView);
Правильное решение :
Извините за недопонимание эффекта реальной потребности, я обновляю следующим образом:
Layer.Mask = maskOfMaskLayer;
Если вы используете AddSublayer
, просто замените ваше изображение на слое, а Layer.Mask
- противоположный эффект, он показывает только фон, покрывающий деталь, а остальная часть области будет белым. CALayer.Mask