11

UIView のすべてのタッチ メソッドは、タッチがそのビューの境界内で開始された場合にのみ呼び出されるようです。ビューの外側に触れたが、指をビューにドラッグしたユーザーにビューを応答させる方法はありますか?

重要な場合、私の特定のアプリケーションは MKPinAnnotationView をドラッグするためのものです (組み込みの 4.0 ドラッグを使用)。ユーザーがピンを別のビュー (たまたま AnnotationView でもありますが、何でもかまいません) にドラッグした場合に、何かが発生するようにしたいと考えています。ピンを放すまで、ドラッグのメソッドは呼び出されません。ビュー内からタッチして開始しない限り、ドラッグされているUIViewのメソッドは呼び出されないようです。

スーパービューは MKMapView であるため、その touchesMoved イベントを使用して、ユーザーが正しい場所にいるかどうかを確認するだけでは困難です。ありがとう!

4

4 に答える 4

3

それで、しばらくいじってみたところ、ここで与えられた答えは、尋ねられた質問が異なっていたとしても、実際に私が必要としていたものを与えてくれました.

UIGestureRecognizer をサブクラス化できることがわかりました。追加されたビュー (MKMapView を含む) のすべてのタッチを処理します。これにより、通常の MKMapView インタラクションはすべて問題なく動作します。だけでなく、タッチについても警告します。touchesMoved では、タッチの位置を確認するだけです。それが私の別の見方の範囲内にあるかどうかを確認してください。

私が試したすべてから。これは、ユーザーが MKAnnotation をドラッグしているときに touchesMoved をインターセプトする唯一の方法のようです。

于 2010-11-18T15:27:47.580 に答える
1

あなたは確かにできる:

(HitstateView.h)

#import <UIKit/UIKit.h>


@interface HitstateView : UIView {
    id overrideObject;
}

@property (nonatomic, retain) id overrideObject;

@end

(HitstateView.m)

#import "HitstateView.h"


@implementation HitstateView

@synthesize overrideObject;

- (void)dealloc {
    self.overrideObject = nil;

    [super dealloc];
}

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *hitView = [super hitTest:point withEvent:event];
    if (hitView == self) {
        return overrideObject;
    }
    return hitView;
}

@end

このビューをタッチ領域のサイズにします。overideObject を、タッチしたいビューに設定します。IIRC では、HitstateView のサブビューである必要があります。

于 2010-11-17T00:02:11.093 に答える
0

すべてのビューが継承UIResponderされるため、すべてのビューがタッチ開始/移動/終了-ビューの外側でタッチを開始しても、タッチがビュー上を移動してもビューにイベントが発生しないとは思いません。何かがMKMapViewにドラッグされたという通知を受け取りたい場合は、タッチを処理するがイベントをに渡すサブクラスを作成してsuper、階層がタッチで必要なことをすべて実行できるようにする必要があります。イベントをキャプチャまたは変更する必要はありません。イベントを観察するだけです。

于 2010-11-16T23:56:57.293 に答える
0

ビューの設定方法によって異なります。一般に、レスポンダー チェーンを活用するのが最善の方法です。特定のニーズに対応するには具体的すぎるかもしれませんが、トリックをプレイできます。

ヒット テストをオーバーライドすることで、転送イベントでトリックをプレイすることもできます。

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MultitouchEvents/MultitouchEvents.html%23//apple_ref/doc/uid/TP40009541-CH3-SW3

あなたの特定のケースはかなりエキゾチックに聞こえるので、問題の両方のビューを含むのに十分な大きさのフレームを持つ親ビューを持つなどのトリックをする必要があるかもしれません.

于 2010-11-17T08:56:13.490 に答える