28412


Objective-CでiOSアプリを作っていて、画像を複数枚並べてそれぞれにタグをつけています。

touchesMovedでドラッグ中に触っているViewのタグを取得したいのですが、  
指を別のViewに移動した時も一番最初に触ったViewのタグの値だけがログに出力されます。

横1列に並べた4枚の画像にタグ（1~4）をつけ、左から順にドラッグした時

[code]

    tag:1
    tag:2
    tag:3
    tag:4
    
[/code]

とその時触っているViewのタグが取れるイメージです。

1枚ずつタップした時はtouchesBeganが実行されて理想通りの値が取れるのですが、touchesMovedではできません。  
どのようにしたらできるのでしょうか？

[code]

    -(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        UITouch *touch = [touches anyObject];
    
        NSLog(@"tag:%ld",touch.view.tag);
    }
    
[/code]


CC BY-SA 3.0
2016-08-18T01:30:24.197
28345
2016-08-23T06:30:23.997
12886
question
ios objective-c xcode iphone
ドラッグ中に触っているViewのtagを取得する方法


`UITouch`のプロパティ`view`では、取得できないのは、経験なさったとおりですから、別の方法を考えましょう。  
`UITouch`のメソッド`locationInView:`なら、メソッドを送った時点のタッチの座標を取得できます。これと、`UIView`のメソッド`hitTest:withEvent:`を組み合わせると、現在のタッチしている座標を含むViewのうち、最前面にあるViewが取得できます。

_ViewController.m_

[code]

    - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [touches anyObject];
        CGPoint thePoint = [touch locationInView: self.view];
        UIView *hitView = [self.view hitTest: thePoint withEvent: event];
        if (hitView != nil) {
            NSLog(@"Hit Test : tag = %ld", hitView.tag);
        }
    }
    
[/code]


CC BY-SA 3.0
2016-08-21T10:18:35.887
28412
2016-08-23T06:30:23.997
2016-08-23T06:30:23.997
-1
18540
28345
answer