标准化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 回答