【问题标题】:Dragging a UIImageview out of UIScrollview将 UIImageview 拖出 UIScrollview
【发布时间】:2011-12-07 07:44:21
【问题描述】:

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

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

【问题讨论】:

    标签: iphone uiscrollview uiimageview drag


    【解决方案1】:

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

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

    编辑: 我检查了我的应用程序以刷新自己的工作,并且我也没有接触到原始项目或在原始项目上结束。我确实在幻灯片视图中的每个视图上都有一个手势识别器,当它被触发时,它会告诉委托(作为滚动视图的父级的视图控制器)正在拖动。从传递的对象中,我可以获得 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];
            }
        }
    
    }
    

    【讨论】:

    • 我尝试在主视图的相同位置创建一个新视图并释放旧视图,但问题仍然存在。触摸事件方法不会在新视图上被调用
    猜你喜欢
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多