2013-01-07 3 views
3

UIImageUIImageView으로 표시됩니다. 또한 첫 번째 이미지 위에있는 UIImageView에 다른 이미지가 있습니다. 첫 번째 이미지의 테두리 내에서만 두 번째 이미지를 드래그 할 수 있기를 원합니다. 내 목표를이 이미지를 좀더 명확하게 보려면 http://img689.imageshack.us/img689/6136/56308823.png.UIImage를 다른 UIImage 내부로 이동하십시오.

녹색 핀은 드래그 가능해야하지만 파란색 핀 (지도 외부)으로 드래그 할 수 없어야합니다. 현재 핀은 드래그 가능하지만 핀이지도 외부에 있는지 확인하는 방법을 모르겠습니다.

편집

: 나는 드래그 할 수 핀 내있는 UIImageView 하위 클래스에서이 방법을 사용 : 맵에 대한 UIIImageView이 어디

- (UIColor *)colorAtPosition:(CGPoint)position { 

CGRect sourceRect = CGRectMake(position.x, position.y, 1.f, 1.f); 
CGImageRef imageRef = CGImageCreateWithImageInRect([[MapViewController sharedMapViewController]getImage].CGImage, sourceRect); 

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); 
unsigned char *buffer = malloc(4); 
CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big; 
CGContextRef context = CGBitmapContextCreate(buffer, 1, 1, 8, 4, colorSpace, bitmapInfo); 
CGColorSpaceRelease(colorSpace); 
CGContextDrawImage(context, CGRectMake(0.f, 0.f, 1.f, 1.f), imageRef); 
CGImageRelease(imageRef); 
CGContextRelease(context); 

CGFloat r = buffer[0]/255.f; 
CGFloat g = buffer[1]/255.f; 
CGFloat b = buffer[2]/255.f; 
CGFloat a = buffer[3]/255.f; 

free(buffer); 

return [UIColor colorWithRed:r green:g blue:b alpha:a]; 
} 

MapViewController가의 ViewController입니다. 그래서이 클래스를지도 이미지를 얻기 위해 싱글 톤으로 만들었습니다. 그러나 다시 색상 값은 전적으로 유선입니다. 또한 내 ui가 약간 달라서 사진을 업데이트했습니다.

답변

4

당신이 UIResponder의 터치 방식을 구현하는 시도 되세요 귀하의 사용자 정의 UIViewController 다음 2 UIViews 다음과 같이 참조?

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch* t = [touches anyObject]; 
    if (t.tapCount == 1 && [yourPinView pointInside:pt withEvent:nil]) 
    { 
     CGPoint pt = [t locationInView:yourMapView]; 
     if ([self getColorOfPt:pt] != <blue>) 
     { 
      state = MOVING; 
     } 
    } 
} 

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    if (MOVING == state) 
    { 
     UITouch* t = [touches anyObject]; 

     // Move the pin only if the current point color is not blue. 
     if ([self getColorOfPt:pt] != <blue>) 
     { 
      CGRect r = yourPinView.frame; 
      r.origin.x = <new point based on diff> 
      r.origin.y = <new point based on diff> 
      yourPinView.frame = r; 
     } 
    } 
} 

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch* t = [touches anyObject]; 
    if (t.tapCount == 1 && MOVING == state) 
    { 
     state == NOT_MOVING; 
    } 
} 
5

는 간단히 드래그 인 점을 확인하고 this 방법을 사용하여 그 시점에서 색상을 결정합니다.

설정에 따라 다음 작업을 수행 할 수 있습니다. touchesMoved:.

+0

내가 말하는 것을 깜박하는 것은 어두운 파랑이 uiimageview의 배경이라는 것입니다. 그것은 투명 PNG 인 uiimage의 일부가 아닙니다. 이 색상 피킹 방법을 시도하기 전에 중요합니까? – dehlen

+0

아니요, "범위를 벗어남"영역에 대해 예약 된 경우 투명 색상을 확인할 수 있습니다. – Mundi

+0

다른 방법이 없습니까? 내 pin-uiimageview가 uiview에 놓여 있고이 뷰 아래에 내 map-uiimageview가 있기 때문에 사용할 수있는 값을 얻지 못한다. 어쩌면 내가 cgrectcointainspoint 또는 pointInside 함께 일할 수 있을까? 이 색상 방식은 나를 위해 작동하지 않습니다. – dehlen

1

이 질문에 대한 답변을 사용하여 픽셀 색상을 얻을 수 있습니다. 그것은 블루 컬러의 경우 What Color is My Pixel? Image based color picker on iPhone

그런 다음 감지 :

Get Pixel color of UIImage

How to get the RGB values for a pixel on an image on the iphone

는 또한 하나의 아름다운 튜토리얼을 발견했다. 그리고 그것이 푸른 색 인 경우 @ basvk으로 말하면 핀을 (다시) 위치시키지 마십시오. 이걸로 뭔가를 얻을 수 있기를 바랍니다. 오전 그냥 당신에게 아이디어를 제공

+0

이제 결과는 얻지 만 올바른 것은 아닙니다. 내가 얻는 색깔은 완전히 유선이다. 자세한 내용은 수정 된 답변을 참조하십시오. – dehlen

1

..

나는지도는 SVG 파일입니다 희망 또는 JPEG이 될 수 있다면 쉽게 어도비 일러스트 레이터를 사용하여 SVG로 변환. 또는이를 수행 할 수있는 다른 옵션이 많이 있습니다.

here 경로를 svg로 변환하는 방법을 찾을 수 있습니다.

here 당신이 다음

당신이 경로 내에있는 터치 포인트를 확인할 수 있습니다 CGPath

에 EPS (일러스트 레이터 경로를) 변환하는 방법을 찾을 수 있습니다

if([CGPathContainsPoint:myPoint]){ 

} 
else{ 


} 
관련 문제