Ios6 UIPANGESTURE识别器并将子视图带到前面

Ios6 UIPANGESTURE识别器并将子视图带到前面,ios6,uipangesturerecognizer,Ios6,Uipangesturerecognizer,我有一个应用程序,用户点击一个按钮,该应用程序将实例化一个图像层(UIImageView)。我想让它,以便用户可以移动选定的图像层,无论他们点击。在阅读了这里的一些主题后,我了解到我可以使用UIPangestureRecognitizer移动选定的图像层 - (IBAction)buttonClicked:(id)sender { imageview = [[UIImageView alloc] initWithFrame:CGRectMake(100, 0, 300, 22)];

我有一个应用程序,用户点击一个按钮,该应用程序将实例化一个图像层(UIImageView)。我想让它,以便用户可以移动选定的图像层,无论他们点击。在阅读了这里的一些主题后,我了解到我可以使用UIPangestureRecognitizer移动选定的图像层

- (IBAction)buttonClicked:(id)sender {
    imageview = [[UIImageView alloc] initWithFrame:CGRectMake(100, 0, 300, 22)];
    UIPanGestureRecognizer *imageviewGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(recognizePan:)];
    [imageviewGesture setMinimumNumberOfTouches:1];
    [imageviewGesture setMaximumNumberOfTouches:1];
    imageview.image = [UIImage imageNamed:@"pinimage.png"];
    [imageview addGestureRecognizer:imageviewGesture];
    [imageview setUserInteractionEnabled:YES];
    [self.view addSubview:imageview];
    NSUInteger currentag = [self UniqueTag]; // Assigning a unique integer
    imageview.tag = currentag;
}

- (void)recognizePan:(UIPanGestureRecognizer *)sender {
    [[[(UITapGestureRecognizer *)sender view] layer] removeAllAnimations];
    [self.view bringSubviewToFront:[(UIPanGestureRecognizer *)sender view]];
    CGPoint translatedPoint = [(UIPanGestureRecognizer *)sender translationInView:self.view];

    if([(UIPanGestureRecognizer *)sender state] == UIGestureRecognizerStateBegan) {     
        firstX = [[sender view] center].x;
        firstY = [[sender view] center].y;
    }

    translatedPoint = CGPointMake(firstX + translatedPoint.x,firstY + translatedPoint.y);
    [[sender view] setCenter:translatedPoint];
}
现在,我不知道的是,当有多个图像层时,如何将点击的层放在前面。似乎[self.view-bringsubview-tofront:[(uipangestrerecognizer*)发送者视图]]并不有效。那么,我如何修改我的代码,以便应用程序将攻丝层带到其他层的顶部呢


感谢您的帮助。

一个好方法是创建UIImageView的CustomImageView子类。将UIPangestureRecognitor附加到CustomImageView的每个实例,并将该实例设置为其目标。然后,由手势触发的动作方法在视图本身中实现,以便您可以使用
self
引用视图:

按钮中单击

    MyImageView* imageview = [[MyImageView alloc] initWithFrame:CGRectMake(100, 0, 300, 22)];
    UIPanGestureRecognizer *imageviewGesture = 
    [[UIPanGestureRecognizer alloc] initWithTarget:imageview 
                                            action:@selector(recognizePan:)];
CustomImageView.m

    - (void)recognizePan:(UIPanGestureRecognizer *)sender {
        [self.layer removeAllAnimations];
        [self.superview bringSubviewToFront:self];
        CGPoint translatedPoint = [sender translationInView:self];
        if([sender state] == UIGestureRecognizerStateBegan) {
            self.firstX = [self center].x;
            self.firstY = [self center].y;
        }
        translatedPoint = CGPointMake(self.firstX + translatedPoint.x,
                                      self.firstY + translatedPoint.y);
        [self setCenter:translatedPoint];
    }
更新

不直接思考-当然,您可以通过访问gestureRecongnizer的
view
属性从viewController执行此操作。你的错误就在这里:

- (void)recognizePan:(UIPanGestureRecognizer *)sender {
     [[[(UITapGestureRecognizer *)sender view] layer] removeAllAnimations];

您正在将发件人类型从
UIPanGestureRecognizer
更改为
UIApgestureRecognizer
。事实上,你不需要在方法体中进行任何
发送者
类型转换。

@TBlue,你说得很对,我没想清楚。。。但这仍然留下了一个问题,为什么你的工作不正常?我的工作正常,基本上和你的一样…谢谢。这应该得到纠正。事实上,我所发布的内容似乎有或没有拼写错误。我犯的一个错误在我的代码中并不明显,那就是我在[self.view addSubview:imageview]后面包含了TextView。我想那会把事情搞砸的。