在0和1之间规范化CGRect

CGRect值标准化为0到1(单位坐标系)的最佳方法是什么?

一个非常简洁的做法是:

 CGAffineTransform t = CGAffineTransformMakeScale(1.0 / parentRect.size.width, 1.0 / parentRect.size.height); CGRect unitRect = CGRectApplyAffineTransform(rect, t); 

这应该做的伎俩。 您只需要按照父视图或图层的宽度/高度来划分所有内容。

 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中阅读更多关于它的信息。

这个怎么样:

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

我认为这样做会使事情变得更清楚一些,如果你必须这样做,你可以用一种明显的方式来处理翻译。