2013-09-21 3 views
1

Привет, я создаю приложение ipad, где я использую UIImageView в UIScrollView. Поэтому, когда я увеличил изображение и попытаюсь нарисовать что-то, он не рисует тот момент, когда я касаюсь. Насколько я увеличил его, он получил разницу в рисовании и создает изображение в верхнем левом углу вместо центра. Ребята предложили мне. вот мой кодРисунок на увеличенном изображении в прокрутке в ios?

if (isFreeHand==YES) { 
    mouseSwiped = YES; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self]; 
    self.frame = CGRectIntegral(self.frame); 

    UIGraphicsBeginImageContextWithOptions(self.frame.size, self.opaque, 0.0); 

    [self.tempDrawImage.image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)]; 

    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x-mWidht, lastPoint.y-mHeight); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x-mWidht, currentPoint.y-mHeight); 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), brush); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); 
    CGContextSetBlendMode(UIGraphicsGetCurrentContext(),kCGBlendModeNormal); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    self.tempDrawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    [self.tempDrawImage setAlpha:opacity]; 
    UIGraphicsEndImageContext(); 

    lastPoint = currentPoint; 
} 
+0

Я думаю, вы должны использовать 'contentOffset' и' zoomScale' для вычисления правильной точки. –

+0

@rokjarc как его использовать ?? –

+0

Я попытаюсь написать гипотетический ответ через минуту. –

ответ

0

Когда изображение масштабируется оказывается больше, чем это. Это происхождение может быть не в (0,0). Таким образом, вам необходимо пересчитать положение real на ощупь.

Для уточнения:

zoom scale ... zs 
image offset ... (oX,oY) 
touch coordinates ... (tX,tY) 
translated touch ... (rtX,rtY) 

Если происхождение увеличенного изображения по-прежнему в (0,0), то вы бы перевести прикосновение, как это:

rtX = tX/zs; 
rtY = tY/zs; 

, если изображения происхождения будет выключен (0 , 0) смещением (oX, oY) и zoomscale будет 1.0, вы переводили бы так:

rtX = tX+oX; 
rtY = tY+oY; 

Собираем все вместе (смещение и масштабирование), перевод будет идти так:

rtX = oX + tX/zs; //with oX zoomscale is allready taken into account 
rtY = oY + tY/zs; //with oY zoomscale is allready taken into account 

Обратите внимание, что эти расчеты не могут быть совершенно правильно, так как я не проверял их. Но они должны заставить вас начать.

Возможно, вам понадобится более элегантное (встроенное) решение вашей проблемы.

0

На четвертой строке заменить self с именем Вашего UIImageView:

CGPoint currentPoint = [touch locationInView: self.tempDrawImage]; 

locationInView фактически делает координаты касания по отношению к определенной UIView, что именно то, что вам нужно.

Смежные вопросы