在 UIScrollview 中为 UIButton 添加 UIPangesture 以在所有视图上移动

Posted

技术标签:

【中文标题】在 UIScrollview 中为 UIButton 添加 UIPangesture 以在所有视图上移动【英文标题】:Adding UIPangesture for UIButton within UIScrollview to move over the all view 【发布时间】:2013-02-26 05:24:20 【问题描述】:

在我的项目中,我在底部滚动,在顶部滚动表格。 在滚动视图中,我添加了 10 个按钮。对于每个按钮,我都有平移手势在屏幕上移动。当按钮与表格相交时,将在表格视图中添加一张图片。

但是平移在滚动中工作。如何使它在视图中移动

我的编码是:

downscroll=[[UIScrollView alloc]initWithFrame:CGRectMake(24, 635, 980, 100)];
downscroll.backgroundColor=[UIColor redColor];
downscroll.contentSize=CGSizeMake(990, 100);

[self.view addSubview:downscroll];

for(int i=1;i<=8;i++)

        b1=[UIButton buttonWithType:UIButtonTypeCustom];
        b1.frame=CGRectMake(30+px, 0, 80, 80);
       [b1 setImage:[UIImage imageNamed: [NSString stringWithFormat:@"Icon%i.png",i]]      forState:UIControlStateNormal];
     [downscroll addSubview:b1];
    // [self.view sendSubviewToBack:b1];
   // [self.view bringSubviewToFront:b1];

    [groupbutton addObject:b1];
     panRecognizer3= [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(move:)];
    [b1 setUserInteractionEnabled:YES];
    b1.exclusiveTouch=YES;
    img.tag=i;
    [b1 addGestureRecognizer:panRecognizer3];

    px=px+120;

当我直接添加按钮而不使用滚动滚动视图时,它工作正常。但我需要添加按钮滚动视图 请帮助正确的代码。提前致谢。

【问题讨论】:

【参考方案1】:

这是我在应用程序中使用的方式 在我的代码中,我遵循以下步骤

    在 UIPanGestureRecognizer 起点中,我将按钮从 scrollView 添加到 self.view 使用translationInView方法拖动按钮

3.在 UIPanGestureRecognizer 结束状态下,我将检查按钮是否掉到目标视图中。如果是,您需要的任务是否在滚动视图中的相同位置添加按钮

`MoveControl` is a UIPanGestureRecognizer method



- (void)MoveControl:(UIPanGestureRecognizer *)recognizer
    
        UIButton *vew=(UIButton *)[recognizer view];
        CGPoint newCenter = [recognizer translationInView:self.view];
        if (recognizer.state==UIGestureRecognizerStateBegan) 
            CGPoint point=vew.frame.origin;
            [vew setTitle:NSStringFromCGPoint(point) forState:UIControlStateSelected];
            CGRect rect=[self.view convertRect:[vew frame] fromView:[vew superview]];
            [vew setFrame:rect];
            [self.view addSubview:vew];
            CGPoint point1=vew.frame.origin;
            [vew setTitle:NSStringFromCGPoint(point1) forState:UIControlStateDisabled];
        
        else
        
            CGPoint oldcentre= CGPointFromString([vew titleForState:UIControlStateDisabled]);
            CGRect rect=vew.frame;
            CGPoint  origin=rect.origin;
            origin.x=(newCenter.x+oldcentre.x);
            origin.y=(newCenter.y+oldcentre.y);
            rect.origin=origin;
            vew.frame=rect;
            if (CGRectIntersectsRect(rect, [pageOriginalContainer frame])) 
                [YourTable setBackgroundColor:[UIColor lightGrayColor]];//Notifying that the tableView will accept the icon
            
            else
            
                [YourTable setBackgroundColor:[UIColor clearColor]];
            
        
        if (recognizer.state==UIGestureRecognizerStateEnded)
        
            CGRect rect=[vew frame];
            if (CGRectIntersectsRect(rect, [pageOriginalContainer frame])) 
                  //your method of adding the Image to table
            
            else//else part is means for if user dropped dragging somewhere else other than Table
            
                CGPoint point=CGPointFromString([vew titleForState:UIControlStateSelected]);
                CGRect frame=vew.frame;
                frame.origin=point;
                vew.frame=frame;
                [pageCopyContainer addSubview:vew];
    //            [NSFileManager defaultManager]
            
        
    

【讨论】:

以上是关于在 UIScrollview 中为 UIButton 添加 UIPangesture 以在所有视图上移动的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中为 zoomScale 设置动画时不需要的滚动

如何在 ios 中为 UIScrollView 设置对齐方式

如何使用自动布局在 UIScrollView 中为视图高度设置动画?

在 UIScrollview 中为 UIButton 添加 UIPangesture 以在所有视图上移动

ImageView 的边界在 ViewDidLayoutSubviews() 中为零 [重复]

UIWebView 在 UIScrollView 内消耗触摸事件