iOS图形从自定义控件的左上角出现

时间:2015-04-20 22:38:25

标签: ios objective-c core-graphics core-animation

我一直在进行循环控制,我做得很好,只是当我第一次进行渲染时,图形会出现在左上角。

整个控件都是子类UIControl,自定义CALayer可以渲染圆圈。

这是渲染圆圈的代码:

- (void) drawInContext:(CGContextRef)ctx{
id modelLayer = [self modelLayer];
CGFloat radius = [[modelLayer valueForKey:DXCircularControlLayerPropertyNameRadius] floatValue];
CGFloat lineWidth = [[modelLayer valueForKey:DXCircularControlLayerPropertyNameLineWidth] floatValue];
//NSLog(@"%s, angle: %6.2f, radius: %6.2f, angle_m: %6.2f, radius_m: %6.2f", __func__, self.circleAngle, self.circleRadius, [[modelLayer valueForKey:@"circleAngle"] floatValue], [[modelLayer valueForKey:@"circleRadius"] floatValue]);

// draw circle arc up to target angle

CGRect frame = self.frame;
CGContextRef context = ctx;

CGContextSetShouldAntialias(context, YES);
CGContextSetAllowsAntialiasing(context, YES);

// draw thin circle

//CGContextSetLineWidth(context, <#CGFloat width#>)

// draw selection circle

CGContextSetLineWidth(context, lineWidth);
CGContextSetStrokeColorWithColor(context, [UIColor greenColor].CGColor);
CGContextAddArc(context, frame.size.width / 2.0f, frame.size.height / 2.0f, radius, 0.0f, self.circleAngle, 0);

CGContextStrokePath(context);

CGContextSetShouldAntialias(context, NO);
}

以下是问题的video

如果你仔细观察,你会注意到圆圈的渲染不会以某种方式开始居中。它从左上角偏斜。 这只在第一次进行动画时才会发生。

我知道如果一个错误开始并结束动画提交块会发生这种情况,但我不在这里使用它们。

以下是此控件的bitbucket repo的链接:

1 个答案:

答案 0 :(得分:2)

绘图方法没有任何问题 - 你搞砸了一下设置图层的框架; - )

您正在- (void) setAngle:(CGFloat)angle方法中设置circularControlLayer的框架。这意味着在为角度属性设置动画时第一次设置框架 - 因此框架也将被设置为动画。在- (void) commonInitDXCircularControlView方法中设置框架。

如果要创建自定义图层,请查看[UIView layerClass]方法。使用它可以避免边界/帧管理的麻烦。