仅在另一个UIImage中移动UIImage

我有一个UIImageView显示的UIImage 。 我也有一个UIImageView中的第一个图像上方的图像。 我想只能在第一张图片的边框内拖动第二张图片。 为了让我的目标看起来更清晰一些: http : //img689.imageshack.us/img689/6136/56308823.png 。

绿色的引脚应该是可拖动的,但不应该可以将引脚拖入蓝色(在地图之外)。 此时该引脚是可拖动的,但我不知道如何检查引脚是否在地图之外。

编辑:我使用这种方法在我的UIImageView子类为可拖拽的引脚:

 - (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是地图的UIIImageView所在的Viewcontroller。 所以我让这个类是一个singleton来获得地图图像。 但是,我所获得的颜色价值是完全有线的。 我也更新了照片,因为我的用户界面略有不同。

你有没有尝试在自定义的UIViewController中实现UIResponder的touch方法,然后像下面那样引用2个UIView?

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

只需检查拖动的点,并使用此方法确定该点的颜色

根据你的设置,你可以做这个例如在touchesMoved:

你可以尝试在UIImageCGPoint上挑选颜色的方法: iPhone Objective C:如何在UIImageView上获取触摸点的像素颜色? 并检测它是否是“蓝色”。
如果它是蓝色的,请不要(重新)放置针脚

您可以使用此问题的答案来获取像素颜色。

获取UIImage的像素颜色

如何获取iPhone上的图像上的像素的RGB值

我还发现了一个美丽的教程: 什么颜色是我的像素? 基于图像的颜色select器在iPhone上

然后检测它是否是蓝色 。 如果这是一个蓝色,然后@basvk说只是不(重新)定位引脚。 希望你从中得到一些东西。

我只是给你一个想法..

我希望地图是一个SVG文件,或者如果它的JPEG可以很容易地转换为使用Adobe Illustrator的SVG。 或者还有很多其他的select。

在这里你可以find如何将SVV转换成path

在这里你可以find如何将EPS(Illustratorpath)转换为CGPath

那么你可以检查触摸点在path内

 if([CGPathContainsPoint:myPoint]){ } else{ }