0

私のプロジェクトでは、下部にスクロールがあり、上部にテーブルがあります。スクロールビュー内に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;
}

スクロールスクロールビューを使用せずにボタンを直接追加すると、正常に機能しますが、ボタンスクロールビューを追加する必要がある場合は、適切なコードを使用してください。前もって感謝します。

4

1 に答える 1

1

これが私のアプリケーションで使用した方法です私のコードでは以下の手順に従います

  1. UIPanGestureRecognizerの開始点で、scrollViewからself.viewにボタンを追加します
  2. translationInViewメソッド を使用してボタンをドラッグします

3. UIPanGestureRecognizerの終了状態で、ボタンが宛先ビューにドロップされたかどうかを確認します。ドロップされた場合は、必要なタスクを実行します。そうでない場合は、scrollViewの同じ位置にボタンを追加します。

`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]
            }
        }
    }
于 2013-02-26T07:22:20.957 に答える