2012-05-09 2 views
0

메인 뷰의 하위 뷰 내부에서 UIImageView에 페인트 할 수있는 iOs 5 앱을 개발 중입니다. 선의 처음 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이 동작에 대한 버그 보고서를 보내주십시오. 충분한 사람들이 불평하지 않으면 애플은 그것을 고치지 않을 것이다. – fzwo