Основная графика перетаскивается по пикселям вместо точек

Ок, нигде не нашел. Что мне делать, если я хочу рисовать с базовой графикой на пиксель? Например… Я хочу нарисовать линию в пикселях (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]));

Я знаю, что пример кода не идеален, но я думаю, что вы поняли идею.

Я буду очень благодарен за помощь, потому что я немного запутался со всеми этими коэффициентами масштабирования.


person Uko    schedule 19.02.2012    source источник


Ответы (1)


Похоже, вы выполняете Assignment3 из Стэнфордского курса iOS uTunes? :)
Думаю, вы на правильном пути, моя реализация очень похожа:

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);          
    }
}


Tested on iOS-Sim iPhone4 (contentScaleFactor 1.0) + iPhone4S Device (contentScaleFactor 2.0).
Would be happy about possible improvements from other readers, because I am still learning.

person Calaelen    schedule 24.02.2012
comment
У меня абсолютно такое же решение. Примите обработку первого x (но это не влияет на скальфактор :)) - person Uko; 25.02.2012