Axesdrawer Stanford cs193p像素和点数

时间:2012-04-02 15:02:48

标签: ios objective-c cs193p

我从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

2 个答案:

答案 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是每个点的像素数。因此,在高分辨率的情况下,每点将具有更多像素。但是,既然我们在分数范围内处理,那么系统不应该在不涉及我们的情况下自行处理吗?