4

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];
}

円は、iPad2および非網膜モードのシミュレーターで正しく表示されます。シミュレーターを網膜モードに切り替えると、円がまったく表示されません。残念ながら、私はまだ実際のiPad 3を持っていないので、実際のデバイスで動作するかどうかはわかりません。誰かが私が間違っていることを説明できますか?

更新:これをバグとしてAppleに報告しました。彼らは私に、バグは重複していて、他のバグはまだ開いていると言った。しばらくすると閉じられましたが、最後のXCodeアップデート後も再現可能です

アップデート2:実際のiPad3でチェックしました。正しく動作します。

4

1 に答える 1

0

それはそう!あなたのコードでは、が 512 以上の場合、円はシミュレーターの Retina iPad に表示されませんcircleLayer...size

さて、今夜は安らかに眠れるようにしたいので、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 Retina Simulator でも同じ円が表示されます。

于 2012-09-04T16:20:29.133 に答える