2

在 iOS 中,我在两个父 UIView 之间拖动一个 UIView。我正在使用 UIPanGestureRecognizer 来管理拖动。当拖动仍在进行时,我使用以下方法切换正在拖动的视图的父级:

- (IBAction)handlePanGesture:(UIPanGestureRecognizer *)sender {
    ...
    [viewBeingDragged removeFromSuperview];
    UIView* page2 = [self.view viewWithTag:pageTag];
    [page2 addSubview:viewBeingDragged];
    // Now scroll page 2 into view
    [pageContainerScrollView setContentOffset:CGPointMake(xcoord, 0) animated:YES];
    ...

这似乎终止了平移事件。然而,我的手指仍然“向下”。在这一点上,我怎样才能检测到我的手指抬起?我尝试了一个单独的 UITapGestureRecognizer,如果没有发生平移,它会很好地触发,但如果平移已经开始,它不会触发。

有任何想法吗?

4

2 回答 2

0

我有同样的问题。您只需要删除该行:[viewBeingDragged removeFromSuperview];

一个 UIView 只能有一个 superview,所以当你调用UIView 时,[page2 addSubview:viewBeingDragged]viewBeingDragged会首先从它当前的 superview 中移除。

于 2012-08-28T14:25:24.467 回答
0

尝试这个:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        ...
    }

    UIPanGestureRecognizer *recognizer;
    recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];        
    [self addGestureRecognizer:recognizer];
}

-(void)handlePanFrom:(UIPanGestureRecognizer *)recognizer {

    if ( [recognizer state] == UIGestureRecognizerStateEnded )
    {
        NSLog(@"Ended");
    }
}

你可以在这里找到所有的状态:

希望能帮助到你。

于 2012-06-15T14:52:14.853 回答