2012-05-09 4 views
0

Я разрабатываю приложение iOs 5, где вы можете рисовать на UIImageView внутри подвид основного изображения. Когда вы рисуете первые 30px линии, вы не следуете вашему штриху. Но действительно редко бывает, что если вы увеличите размер ImageView и сделаете его размером, как и весь экран 460x320 (хотя вы не видите полный ImageView, потому что он больше, чем вид, где он находится внутри.) Он отлично работает. Так что, возможно, есть решение. Вот мой код:Ошибка при рисовании приложения iOS

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    mouseSwiped = NO; 
    UITouch *touch = [touches anyObject]; 

    if ([touch tapCount] == 2) { 
     drawImage.image = nil; 
     return; 
    } 

    lastPoint = [touch locationInView:self.view]; 
    lastPoint.y -= 10; 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
    mouseSwiped = YES; 
    UITouch *touch = [touches anyObject]; 
    CGPoint currentPoint = [touch locationInView:self.drawImage]; 
    currentPoint.y -= 10; // only for 'kCGLineCapRound' 
    UIGraphicsBeginImageContext(self.drawImage.frame.size); 

    [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)]; 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5); // for size 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 1.0, 0.0, 1.0); //values for R, G, B, and Alpha 
    CGContextBeginPath(UIGraphicsGetCurrentContext()); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    lastPoint = currentPoint; 

    mouseMoved++; 

    if (mouseMoved == 10) { 
     mouseMoved = 0; 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {  
    UITouch *touch = [touches anyObject]; 

    if ([touch tapCount] == 2) { 
     drawImage.image = nil; 
     return; 
    } 
    if(!mouseSwiped) { 
     //if color == green 
     UIGraphicsBeginImageContext(self.drawImage.frame.size); 
     [drawImage.image drawInRect:CGRectMake(0, 0, drawImage.frame.size.width, drawImage.frame.size.height)]; //originally self.frame.size.width, self.frame.size.height)]; 
     CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); //kCGLineCapSquare, kCGLineCapButt, kCGLineCapRound 
     CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5); 
     CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 0.0, 1.0, 0.0, 1.0); 
     CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
     CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
     CGContextStrokePath(UIGraphicsGetCurrentContext()); 
     CGContextFlush(UIGraphicsGetCurrentContext()); 
     drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
    } 
} 

That's what I get

ответ

1

Проблема заключается в том, что первый touchesMoved: задерживается на API. Я не уверен, что кто-то еще смог обойти эту проблему.

Пожалуйста, отчет об ошибке в http://radar.apple.com

Реальная проблема в вашем случае это простая ошибка, хотя: Вы используете две различные системы координат в touchesBegan: и touchesMoved:.

touchesBegan:

lastPoint = [touch locationInView:self.view]; 
           ////////// 

touchesMoved:

CGPoint currentPoint = [touch locationInView:self.drawImage]; 
              /////////////// 
+0

К сожалению, я не закончил фразу, сейчас читать. :) –

+0

Простите, теперь я закончил предложение :) Прочтите сейчас, я думаю, вы поймете! –

+0

@MartiSerraVivancos Просьба сообщить об этом ошибке. Apple, вероятно, не будет исправлять это, если не хватает людей, жалующихся. – fzwo

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