将UIImageview拖出UIScrollview

时间:2011-12-07 07:44:22

标签: iphone uiscrollview uiimageview drag

我在uiscrollview中有很多uiimageviews。我试图将uiimageview拖出uiscrollview。我已经对uiscollview进行了子类化,并编写了custon touchbegan,toucmoved和touchended方法,将滚动拖动事件上的touchview传递给scrollview超类,并在scroll -events以外的事件上传递给我的主viewcontroller类touchmethods。 要将uiimageview拖出uiscrollview,我将其从superview(scrollview)中删除,并将其添加到touchview的touchbegan方法上。 我的uiimageview已从scrollview中删除,并成功添加到mainview中。 现在的问题是:在第一次触摸时,我的touchbegan方法被调用,但是当我移动uiimageview时不调用touchmoved方法。 在第二次触摸时,一切正常,uiimageview被拖出滚动视图

更新:我继承了UIImageView类并在uiimageview子类中编写了touchbegan,touchmoved和touchended方法,现在它正在工作。以前我使用的是主视图的触摸方法,所以触摸方法也在考虑触摸UIScollview。但现在只考虑uiimageviews。我还添加了一个更改:我在touchbegan禁用滚动并在touchend启用它。感谢名单

1 个答案:

答案 0 :(得分:1)

最适合我的是不要移动滚动视图中的uiImageView,而是创建一个重复的视图(在控制视图控制器中)并使用触摸移动它,然后将其添加到主视图,然后删除原本的。

如果用户中途改变主意并决定不拖出它,这种方法看起来也会更好。

编辑: 我检查了我的应用程序,以刷新自己做了什么,我也没有得到touchesMoved或在原始项目上结束。我在幻灯片视图中的每个视图上都有一个手势识别器,当它被触发时,它会告诉委托(滚动视图的父视图控制器)拖动正在进行中。从传递的对象中我可以获得CGPoint并采取相应的行动:

UILongPressGestureRecognizer *myRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(drag:)];
[myRecognizer setDelegate:self];
[myItemInsideScrollView addGestureRecognizer:myRecognizer];


-(void)drag:(UILongPressGestureRecognizer *)sender {
    [self.view bringSubviewToFront:[(UILongPressGestureRecognizer*)sender view]];
    CGPoint translatedPoint = [sender locationInView:self.view];

    // if we are not already dragging we create the duplicate view
    // if we are already dragging just update the location of the duplicate view

    // next check if drag has ended and if so call a method to do what we want
    if ( dragging ) {
        if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded) {
            [self checkForDragRelease:(CGPoint)translatedPoint];
        }
    }

}