核心图形拖过像素而不是点

时间:2012-02-19 00:34:22

标签: objective-c ios core-graphics drawrect pixels

好的,我还没有找到它。如果我想用每个像素的核心图形绘制,我该怎么办?喜欢...我想画一条线到像素(45,61)和比(46,63)而不是绘制到点(23,31)或类似的东西。那么在这种情况下该怎么做呢?

我应该使用类似的东西:

CGContextAddLineToPoint(context,22.5,30.5);
CGContextAddLineToPoint(context,23,31.5);

还是有更好的方法?

我知道contentScaleFactor但我应该将其用作(绘制某些功能时为例如):

for(int x=bounds.origin.x; x<=bounds.origin.x+bounds.size.width*[self contentScaleFactor]; i++)
    CGContextAddLineToPoint(context,x/[self contentScaleFactor],y(x/[self contentScaleFactor]));

我知道示例代码不是很棒,但我认为你会明白这一点。

我会感谢你的帮助,因为我对所有这些比例因子的东西感到困惑。

1 个答案:

答案 0 :(得分:1)

听起来你正在从iOS uTunes Stanford Course做Assignment3? :)
我认为你走在正确的轨道上,因为我的实现看起来非常相似:

for(int x=self.bounds.origin.x; x<=self.bounds.origin.x + (self.bounds.size.width * self.contentScaleFactor); x++) {
    // get the scaled X Value to ask dataSource
    CGFloat axeX = (x/self.contentScaleFactor - self.origin.x) / self.scale;

    // using axeX here for testing, which draws a x=y graph
    // replace axeX with the dataSource Y-Point calculation
    CGFloat axeY = -1 * ((axeX * self.scale) + self.origin.y); 

    if (x == self.bounds.origin.x) {
        CGContextMoveToPoint(context, x/self.contentScaleFactor, axeY);
    } else {
        CGContextAddLineToPoint(context, x/self.contentScaleFactor, axeY);          
    }
}

for(int x=self.bounds.origin.x; x<=self.bounds.origin.x + (self.bounds.size.width * self.contentScaleFactor); x++) { // get the scaled X Value to ask dataSource CGFloat axeX = (x/self.contentScaleFactor - self.origin.x) / self.scale; // using axeX here for testing, which draws a x=y graph // replace axeX with the dataSource Y-Point calculation CGFloat axeY = -1 * ((axeX * self.scale) + self.origin.y); if (x == self.bounds.origin.x) { CGContextMoveToPoint(context, x/self.contentScaleFactor, axeY); } else { CGContextAddLineToPoint(context, x/self.contentScaleFactor, axeY); } }
在iOS-Sim iPhone4(contentScaleFactor 1.0)+ iPhone4S设备(contentScaleFactor 2.0)上测试。
对其他读者可能的改进感到高兴,因为我还在学习。