我正在学习斯坦福大学的CS 193p课程(在iTunesU中),我试图理解他们为作业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
发布于 2012-04-20 19:29:20
这个类正确地将一个点视为一个点-这意味着您的bounds.size.width和bounds.size.height的尺寸与iPhone 3GS屏幕的像素大小相同……
如果您正在编译到附加的3Gs,则内容比例因子为1。
如果您连接到iPhone 4或4s,则内容比例因子为2。
但是,AxesDrawer将scale视为pointsPerUnit,在iPhone 4上为0.5,因此传递给它的scale为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个像素。
发布于 2015-02-25 15:07:42
但contentScaleFactor是每个点的像素数。因此,在高分辨率的情况下,它将有更多的像素每个点。但是,既然我们是在点数范围内处理问题,那么系统不应该在不涉及我们的情况下自行处理吗?
https://stackoverflow.com/questions/9978792
复制相似问题