处理大于其父视图的子视图的触摸

时间:2013-02-08 22:40:29

标签: c# xamarin.ios touch subview touchesbegan

假设我创建了一个包含另一个UIImageView的UIImageView。但SubView比第一个视图大。

enter image description here

绿色子视图比它的超级视图(黑色方块)大得多。如果我触摸左上角只有黑色方块,我会得到“touchbegan image1”这就是我所期望的。如果我触摸黑色正方形和绿色正方形重叠的区域,我会得到“touchbegan image1”和“touchbegan image2”,这是我所期望的。 这是我的问题:如果我触摸黑色方框外的区域,只有绿色方块存在,我没有输出。所以TouchesBegan既不是image1也不是image2。在这种情况下,当我只触摸绿色矩形同时仍然保持image2(绿色)作为image1(黑色)的子视图时,我希望调用TouchesBegan for image2(绿色)。这可能吗?

    MyImage image1 = new MyImage(new RectangleF(0,0,200,200), "image1");
    image1.BackgroundColor = UIColor.Black;
    this.View.AddSubview(image1);

    MyImage image2 = new MyImage(new RectangleF(50,50,500,500), "image2");
    image2.BackgroundColor = UIColor.Green;
    image1.AddSubview(image2);




public class MyImage : UIImageView
{

    public MyImage ( RectangleF frame, string _Name ) : base(frame)
    {
        Name = _Name;
        UserInteractionEnabled = true;
    }


    public override void TouchesBegan (NSSet touches, UIEvent evt)
    {
        base.TouchesBegan (touches, evt);

        Console.WriteLine("touchbegan " + Name);
    }

1 个答案:

答案 0 :(得分:0)

因为你将它添加为image1的子元素。 Image1侦听其绑定/帧内的触摸并将其发送给它的子节点(如果有的话)。 image2,可能更大,但它的touchlistener来自image1帧触摸。