Ich habe eine Ansicht, in der ich einen Kreis mit UIBezierPath bezierPathWithArcCenter
zeichnen möchte. Meine Ansicht des initWithFrame
ist wie folgt:UIBezierPath bezierPathWithArcCenter nicht richtig zentriert
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if(self == nil) {
return nil;
}
self.circleLayer = [CAShapeLayer layer];
self.circleLayer.fillColor = UIColor.clearColor.CGColor;
self.circleLayer.strokeColor = UIColor.blackColor.CGColor;
self.circleLayer.lineWidth = 4;
self.circleLayer.bounds = self.bounds;
self.startAngle = 0.0;
self.endAngle = M_PI * 2;
CGPoint center = CGPointMake(self.frame.size.width * 0.5, self.frame.size.height * 0.5);
CGFloat radius = self.frame.size.height * 0.45;
self.circleLayer.path = [UIBezierPath bezierPathWithArcCenter:center radius:radius startAngle:self.startAngle endAngle:self.endAngle clockwise:YES].CGPath;
[self.layer addSublayer:self.circleLayer];
self.backgroundColor = UIColor.greenColor;
return self;
}
erwartete ich, dass ein schwarzer Kreis meiner Ansicht zentriert erzeugen würde. Die tatsächliche Ausgabe sieht jedoch so aus:
Was mache ich falsch?
EDIT Der seltsamste Teil ist, dass es richtig nach einem frischen gezogen ist die App-Installation - alle aufeinander folgende Starts führen es angebracht, wie in dem Bild gezeichnet wird. Warum?
Versuchen Sie, diesen Code in der drawRect-Methode zu verwenden –
'self.circleLayer.frame = self.bounds;'? – Larme
@Larme gut, es ist eine Unterschicht, so muss es '(0, 0)' Herkunft haben. Oder liege ich falsch? –