【发布时间】:2014-12-04 02:14:32
【问题描述】:
我遇到了一个奇怪的问题,我的代码适用于某些 iPad 型号,但不适用于其他型号,即使它们运行的是相同版本的 iOS。这个绘制白色圆圈的简单代码适用于运行 iOS 8.1.1 的 iPad 4,但不适用于运行 8.1.1 的 iPad Mini Retina。这甚至可以在模拟器中重现。它在“iPad Retina 8.1”或“iPad 2 8.1”模拟器上运行时有效,但在“iPad Air 8.1”上运行时无效。当它不起作用时,它不会画一个小白圈。视图是空白的。为什么会这样?
@implementation MyUIViewSubclass
{
CAShapeLayer* animationLayer;
CGMutablePathRef smallCircle;
}
- (id) initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder])
{
smallCircle = CGPathCreateMutable();
CGPathAddArc(smallCircle, NULL, self.bounds.size.width / 2, self.bounds.size.height / 2, 32, (CGFloat)M_PI, -(CGFloat)M_PI, NO);
animationLayer = [CAShapeLayer layer];
animationLayer.frame = CGRectMake(0, 0, self.bounds.size.width, self.bounds.size.height);
animationLayer.lineWidth = 1;
animationLayer.strokeColor = [[UIColor whiteColor] CGColor];
animationLayer.fillColor = [[UIColor clearColor] CGColor];
animationLayer.path = smallCircle;
[self.layer addSublayer:animationLayer];
}
return self;
}
@end
【问题讨论】:
-
是的,CGFloat(以及其他一些 Apple 包装器原语)最终可能会出现与您预期不同的类型。例如,CGFloat 可能是您期望的浮点数,也可能是双精度数,具体取决于架构。此外,将 UI 代码放在 init 方法中被认为是不好的做法。您通常希望它们出现在 viewDidLoad 或 viewWillAppear 中,具体取决于您的设置。
标签: ios objective-c ipad core-graphics