我从stanford(在iTunesU)学习CS 193p课程,我正在尝试理解他们为Assigment 3提供的AxesDrawer类,特别是这些行是drawHashMarksInRect方法的一部分
#define HASH_MARK_SIZE 3
#define MIN_PIXELS_PER_HASHMARK 25
+ (void)drawHashMarksInRect:(CGRect)bounds originAtPoint:(CGPoint)axisOrigin scale: (CGFloat)pointsPerUnit
{
.....
int unitsPerHashmark = MIN_PIXELS_PER_HASHMARK * 2 / pointsPerUnit;
if (!unitsPerHashmark) unitsPerHashmark = 1;
CGFloat pixelsPerHashmark = pointsPerUnit * unitsPerHashmark;
....
}
他们如何说使用像素而不使用contentScaleFactor属性?他们实际上是在使用像素还是只是点而滥用这个词?这是AxesDrawer code
答案 0 :(得分:0)
该类正确地将一个点视为一个点 - 这意味着您的bounds.size.width和bounds.size.height与iPhone 3GS屏幕的大小(以像素为单位)相同...
如果您正在编译附加的3G,则内容比例因子为1.
如果您连接到iPhone 4或4s,则内容比例因子为2。
然而,AxesDrawer将scale视为pointsPerUnit,在iPhone 4上为0.5,因此传递给它的比例为0.5
通过在绘图视图的UIView类中放置以下内容来获得此结果;
CGFloat screenScale = self.contentScaleFactor;
CGFloat scaleForAxesDrawer = 1 / screenScale;
[[self.axes class] drawAxesInRect:graphArea originAtPoint:axisPoint scale:scaleForAxesDrawer];
// where graphArea is a CGRect and axisPoint is a CGPoint
例如。
AxesDrawer将在轴上放置一个哈希标记和数字,每隔25个像素。
答案 1 :(得分:0)
但是contentScaleFactor是每个点的像素数。因此,在高分辨率的情况下,每点将具有更多像素。但是,既然我们在分数范围内处理,那么系统不应该在不涉及我们的情况下自行处理吗?