CGRect
値が 0 から 1 (単位座標系) になるように値を正規化する最良の方法は何ですか?
2681 次
3 に答える
17
これを行う非常に簡潔な方法は次のようになります。
CGAffineTransform t = CGAffineTransformMakeScale(1.0 / parentRect.size.width, 1.0 / parentRect.size.height);
CGRect unitRect = CGRectApplyAffineTransform(rect, t);
于 2013-04-16T16:44:08.533 に答える
12
これでうまくいくはずです。親ビューまたはレイヤーの幅/高さですべてを分割するだけです。
CGFloat parentWidth = parentView.bounds.size.width;
CGFloat parentHeight = parentView.bounds.size.height;
CGRect rectToConvert = ...;
rectToConvert.origin.x /= parentWidth;
rectToConvert.origin.y /= parentHeight;
rectToConvert.size.width /= parentWidth;
rectToConvert.size.height /= parentHeight;
これらの種類の四角形と点は「単位座標系」にあると言います。詳細については、Core Animation Programming Guideを参照してください。
于 2013-04-16T15:56:53.980 に答える
0
これはどう:
CGRect rectToConvert;
NSAffineTransform *n = [NSAffineTransform transform];
[n scaleXBy:rectToConvert.size.width
yBy:rectToConvert.size.height];
[n invert];
CGRect normalizedRect;
normalizedRect.origin = [n transformPoint:rectToConvert.origin];
normalizedRect.size = [n transformSize: rectToConvert.size];
CGPoint anyPointINeedToConvert;
CGPoint convertedPoint = [n transformPoint:anyPointINeedToConvert];
これにより、何が起こっているのかが少し明確になり、翻訳を行う必要がある場合でも、わかりやすい方法で翻訳を処理できるようになると思います。
于 2013-04-16T16:08:59.820 に答える