3

UIImage示されている がありUIImageViewます。UIImageViewまた、最初の画像の上に別の画像があります。最初の画像の境界内でのみ 2 番目の画像をドラッグできるようにしたい。私の目標をもう少し明確にするために、この画像を見てください: .

緑色のピンはドラッグ可能である必要がありますが、ピンを青色 (マップの外側) にドラッグすることはできません。現時点ではピンはドラッグ可能ですが、ピンがマップの外にあるかどうかを確認する方法がわかりません。

編集:ドラッグ可能なピンの 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 です。そのため、このクラスをシングルトンにして、マップ イメージを取得しました。しかし、色に対して得られる値は完全に配線されています。また、UIが少し変わったので写真を更新しました。

4

5 に答える 5

5

ドラッグがあるポイントを確認し、この方法を使用してそのポイントの色を決定するだけです。

セットアップに応じて、たとえば でこれを行うことができますtouchesMoved:

于 2013-01-07T16:16:47.840 に答える
4

カスタム 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;
    }
}
于 2013-01-15T09:47:39.340 に答える
3

の色を選択してアプローチを試すことができます: iPhone Objective C: UIImageView のタッチポイントのピクセルの色を取得するにはCGPoint? 「青色」かどうかを検出します。青色の場合は、ピンを (再) 配置しないでください。UIImage

于 2013-01-07T16:15:40.170 に答える
1

ただあなたにアイデアを与えているだけです..

マップがSVGファイルであるか、そのjpegがAdobeIllustratorを使用してSVGに簡単に変換できることを願っています。または、それを行うための他の多くのオプションがあります。

ここで、svgをパスに変換する方法を見つけることができます。

ここでは、EPS(イラストレーターパス)をCGPathに変換する方法を見つけることができます

次に、タッチポイントがパス内にあるかどうかを確認できます

if([CGPathContainsPoint:myPoint]){

}
else{


}
于 2013-01-10T18:38:01.900 に答える
1

この質問の回答を使用して、ピクセルの色を取得できます。

UIImageのピクセルカラーを取得

iPhoneの画像のピクセルのRGB値を取得する方法

美しいチュートリアルも 1 つ見つけました: What Color is My Pixel? iPhoneの画像ベースのカラーピッカー

次に、それがBlue Colorかどうかを検出します。そして、それが青色の場合、@basvkが言ったように、ピンを(再)配置しないでください。これから何かを得られることを願っています。

于 2013-01-10T13:09:58.093 に答える