[英]CAShapeLayer is not drawn in simulator in iPad retina mode
我有一小段代碼,它繪制一個圓圈作為CAShapeLayer:
- (void) viewWillAppear:(BOOL)animated {
CGFloat size = MIN(self.view.frame.size.width, self.view.frame.size.height);
CAShapeLayer *circleLayer = [CAShapeLayer layer];
circleLayer.fillColor = [[UIColor redColor] CGColor];
circleLayer.frame = CGRectMake((self.view.frame.size.width - size) / 2.0 ,(self.view.frame.size.height - size) / 2.0, size, size);
CGMutablePathRef pathRef = CGPathCreateMutable();
CGPathAddEllipseInRect(pathRef, NULL, CGRectMake(0, 0, size, size));
circleLayer.path = pathRef;
CGPathRelease(pathRef);
[self.view.layer addSublayer:circleLayer];
}
在iPad 2和非視網膜模式的模擬器中正確顯示圓圈。 當我將模擬器切換到視網膜模式時,根本不顯示圓圈。 不幸的是,我還沒有真正的iPad 3,所以我不能說,如果它適用於實際的設備。 任何人都可以解雇,我做錯了什么?
更新:我將此報告為Apple的錯誤。 他們告訴我,這個bug是重復的,另一個bug仍然是開放的。 一段時間后它關閉了,但在最后一次XCode更新后,它仍然可以重現
更新2:在真正的iPad上檢查它3.正常工作。
確實! 使用您的代碼,如果circleLayer
的size
為512或更高,則該模擬器的視網膜iPad上不會顯示該圓圈...
現在,鑒於我希望能夠今晚安靜地睡覺,這是一個使用CALayer的cornerRadius
屬性來解決這個問題的解決方法:
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated]; //always call super
CGFloat size = MIN(self.view.frame.size.width, self.view.frame.size.height);
NSLog(@"size: %f", size);
CALayer *circleLayer = [CALayer layer];
[circleLayer setBackgroundColor:[UIColor redColor].CGColor];
circleLayer.frame = CGRectMake((self.view.frame.size.width - size) / 2.0 ,(self.view.frame.size.height - size) / 2.0, size, size);
circleLayer.cornerRadius = size/2;
[self.view.layer addSublayer:circleLayer];
}
這也將在iPad視網膜模擬器中顯示相同的圓圈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.