2012-04-16 3 views
2

나는 며칠 동안 여러 가지를 시도해 왔지만 아직도 그걸 고수했습니다. 희망하는 것은 무엇이 잘못되었고 가능한 해결책인지 이해할 수 있기를 바래요.이 순간이 저를 미치게합니다. 사전에 도와 주신 모든 분들께 감사드립니다.손가락 뽑기가 가로 모드로 작동하지 않습니다.

컨텍스트 : 나는 칠판에 대한 데모 (그 의미는 아직 응용 프로그램이 아니라 단지 개념 증명)로 작업 중입니다. StackOverflow는 '스팸 방지'이유로 질문에 이미지를 게시 할 수 없으므로 Dropbox 계정을 연결하여 사진을 표시하려고합니다. 이를 참조하십시오

https://www.dropbox.com/gallery/5189052/1/so?h=8573b1

당신은 이미지 1.

문제에서 세로 모드로 칠판을 볼 수 실제로 두 가지 문제가있다.

첫 번째는 세로 모드에서 드로잉이 잘 작동하는 것처럼 보이지만 을 가로 모드로 전환하면 드로잉 영역이 다른 크기를 반영하지 않는 것 같습니다.

칠판 함유 UIImageView에 올바른 크기 (즉, 위의 바 겹치지) 갖지만 I는 도면 영역의 범위를 적용 할 수있을 것 같지 않도록한다. 이것은 세로 및 가로 모드 모두에서 발생합니다.

두 링크 모두 이전 링크의 이미지 2에서 볼 수 있습니다. 드로우는 인물 모드에서 멈출 곳에서 멈추고 컬러와 고무로 바를 그립니다.

코드 : 아래는 선택기가 접촉하는 코드입니다. 또한 위의 링크에서 이미지 3에 내 펜촉 파일의 구조에 대한 설명을 첨부합니다. 게시하기 전에, 내가 몇 가지를 시도 : 나는을 시도 무엇

//viewDidLoad in MyViewController.m. DrawImage is the UIImageView containing the board 
- (void)viewDidLoad { 
[super viewDidLoad]; 
drawImage = [[UIImageView alloc] initWithImage:nil]; 
drawImage.frame = self.view.frame; 
[self.view addSubview:drawImage]; 

mouseMoved = 0; 
colorCode = 1; 

red = 1.0; 
green = 1.0; 
blue = 1.0; 

} 


//touchesBegan in MyViewController.m 
- (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]; 
} 


//touchesMoved in MyViewController.m 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { 
mouseSwiped = YES; 

UITouch *touch = [touches anyObject]; 
CGPoint currentPoint = [touch locationInView:self.view]; 

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

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 4.0); 
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); 

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

} 


//touchesEnded in MyViewController.m 
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { 

UITouch *touch = [touches anyObject]; 

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


if(!mouseSwiped) { 
    UIGraphicsBeginImageContext(self.view.frame.size); 
    [drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
    CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
    CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); 
    CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), red, green, blue, 1.0); 
    CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
    CGContextStrokePath(UIGraphicsGetCurrentContext()); 
    CGContextFlush(UIGraphicsGetCurrentContext()); 
    drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
} 
} 

. 가로 모드에서 좌표가 바뀌는 것이 프레임이 아니라 경계라는 것을 알아 챘습니다. 예를 들어, self.view.frame.width 및 height는 세로 및 가로 방향으로 각각 320 및 480에 머물러 있지만 가로 방향에서는 480 및 320으로 바뀝니다. 그래서 나는 길과 직사각형의 기초를 세우려고했지만, 불행히도 이상한 좌표로 이상한 그림을 그리기 시작합니다.

드로잉 영역이 전체 창을 가로 지르는 메인 뷰의 프레임을 통해 결정된다는 사실에 내가 올바른 드로잉 경계를 적용 할 수없는 이유가 있습니다. 나는 보드를 포함하는 UIImageView를 (오른쪽 크기의) 추가 뷰 내에 삽입하고 MyViewController.h에 정의 된 콘센트에 연결하려고 시도했지만, 불행하게도이 문제는 변경되지 않았습니다.

답변

0

touchesMoved : 메서드에서 검정 또는 다른보기가 포함 된 UIImageView에서 터치가 감지되는 조건을 지정할 수 있습니다. 칠판 뷰가 아닌 경우 이미지를 그리지 않고 반환합니다.

+0

답변 해 주셔서 감사합니다. 터치가 어떤 뷰에 있는지 확인하는 방법이나 내가 왜 체크하고 싶은지에 대해서는 명확하지 않습니다. 내 코드에서 self.view에 직사각형을 그립니다. 터치가있는 모습이 상상할 수 있습니까? 다시 한 번 감사드립니다. – Diferdin

+0

당신은 self.view에 drawImage 프레임을 설정하고 그 위에 그림을 그리는 중입니다. 제 제안은 drawImage의 y + 100 값으로 프레임을 시작한 다음 그 위에 칠판 만 그립니다. 잔여 먼지와 색상 선택을 넣을 수 있습니다. drawImage 상단의 self.view에있는 버튼으로 터치가 발생한 위치를 쉽게 식별 할 수 있습니다. – user1226038

+0

다시 한번 감사드립니다. 나는 조금 혼란 스럽다 ... 나는 당신의 제안에서 내가 믿는 것을 시도했다. 설정 됨 drawImage.frame = CGRectMake (100, 100, 320, 480); 결과로 그 결과로 그려진 선은 그 좌표의 용량만큼 이동했습니다. 그게 실제로 DrawImage에 그려져 있다는 뜻일까요? 건배. – Diferdin

-1

마지막으로 Apple 설명서에 제안 된 방식으로 문제를 해결했습니다. 가로보기 컨트롤러를 만들었고 초상화를 가로 지르도록했습니다. 꽤 잘 작동합니다.

관련 문제