簡體   English   中英

在iPad視網膜模式下,CAShapeLayer不會在模擬器中繪制

[英]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.正常工作。

確實! 使用您的代碼,如果circleLayersize為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM