仅在另一个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:
你可以尝试在UIImage
的CGPoint
上挑选颜色的方法: 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{ }
- UITableView自定义大小的单元格(使用UITableViewAutomaticDimension自动计算行高)
- 苹果是否修改了提交给App Store的应用程序上的iOS应用程序可执行文件?
- IOS中的Facebooklogin在模拟器上工作,但不能在安装了本地应用程序的设备上工作
- 如何使用Xcodedebugging器打印出一个属性的内容?
- 如何让键盘覆盖我的用户界面,而不是resize?
- 在界面构建器/故事板中设置UIButton图像
- 在iOS中的UItoolbar中导航
- thumbnailLink不会使用iOS Google Drive API返回任何文件
- iOS 7是否支持Applescript?