23

私はこれを理解することはできません...私は遊んでいます

-[UIBezierPath bezierPathWithRoundedRect:byRoundingCorners:cornerRadii:]そのような:

bezierPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(10, 10, 80, 80)
                                   byRoundingCorners:(UIRectCornerBottomLeft)
                                         cornerRadii:CGSizeMake(20, 20)];

そして、それは期待どおりに機能します。しかし、 cornerRadii:CGSizeMake(20, 20) をcornerRadii:CGSizeMake(20, 5)または などに置き換えても、CGSizeMake(20, 40)違いはありません。

では、なぜ cornerRadiiCGSizeであり、そうではないのCGFloatですか? 何CGSize.heightのためですか?

どんなアイデアやアドバイスも大歓迎です:)

ここに画像の説明を入力 ここに画像の説明を入力

4

3 に答える 3

6

これが iOS 6 の後に導入されたバグであることを確認できました。iOS 6.1 を実行している古い 4s を持っています。そのマシンで、このコード:

  path = [UIBezierPath bezierPathWithRoundedRect: bounds
    byRoundingCorners: UIRectCornerTopLeft | UIRectCornerTopRight
   cornerRadii: CGSizeMake(bounds.size.width/2, bounds.size.width/6)
 ];

角が楕円形の角の丸い長方形を作成します。ご想像のとおり、曲線は、曲線の上部ではより緩やかで、側面ではより鋭くなっています。

これは iOS 6.1 のイメージで、角は次のようになっています。 これは iOS 6.1 の画像で、角が本来あるべき状態になっています

iOS 8.1.2 から同じコードを実行すると、次のようになります。 ここに画像の説明を入力

iOS >=7.0 では、指定された半径の高さを無視し、角の楕円の高さと幅の両方に幅の値を使用するようです。これにより、常に四分円になります。

Apple のバグ報告システムにバグを記録しました。彼らが何を言うか見てみましょう。この問題を見ている他のすべての人にもバグを報告することをお勧めします。報告が多ければ多いほど、修正する可能性が高くなります。

于 2015-01-22T19:45:51.140 に答える
3

さらにテストを重ねた結果、iOS 7 のバグであることがわかりました。予想どおり、iOS 6 シミュレーターの同じコードが適切に描画されます。ただし、iOS 7 シミュレーターと iOS 7 デバイスの両方にこの問題があり、正しく描画されません。

誰かが私が間違っていることを証明し、私が見逃しているものがない限り、私はバグレポートを提出します。

于 2013-09-18T21:53:46.723 に答える