1

UIScrollViewに多くのUIImageViewが含まれています。UIImageをUIScrollViewから別のビューにドラッグする必要があります。しかし、私のコードはUIScrollViewでのみドラッグします。画像をscrollViewの外側にドラッグすることはできません。私を助けてください..私のコードは..

for (int i = 0; i < [myArray count]; i++) {
  image = [[UIImageView alloc]initWithFrame:CGRectMake(0, y, 75, 30)];
  image.userInteractionEnabled = YES;
  image.backgroundColor = [UIColor blueColor];

  UIPanGestureRecognizer *panRecg = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(labelDragged:)];
  [image addGestureRecognizer:panRecg];
  y=y+35;

  [gScrollView addSubview:image];
}

-(void)labelDragged:(UIPanGestureRecognizer *)recognizer {
  UIImageView *imageView = (UIImageView *)recognizer.view;
  CGPoint newCenter = [recognizer translationInView:self.view];

  if([recognizer state] == UIGestureRecognizerStateBegan) {     
    beginX = imageView.center.x; 
    beginY = imageView.center.y;
  }

  newCenter = CGPointMake(beginX + newCenter.x, beginY + newCenter.y);

  [imageView setCenter:newCenter];
}
4

3 に答える 3

2

いくつかの観察:

  1. スクロールビューからドラッグするときは、スクロールビューから削除して、たとえば に追加しself.viewます。addSubview次に、それに応じて座標を調整します。

    newCenter = [self.view convertPoint:newCenter fromView:imageView.superview];
    [self.view addSubview:imageView];
    imageView.center = newCenter;
    
  2. スクロール ビューが NOに設定されていることを確認しclipsToBoundsてください。これにより、ドラッグしても引き続き表示されます。

  3. imageView.superviewスクロール ビューではなく参照するようにこれを変更したことに注意してください。そこにスクロールビュー参照を保持する場合は、条件付きチェックを追加して、画像ビューがまだスクロール ビューから移動していないことを確認する必要があります。

于 2013-02-26T15:47:16.060 に答える
1

ドラッグする方法はこちら

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

{
        UIImageView *imageView=(UIButton *)[recognizer view];
        CGPoint newCenter = [recognizer translationInView:self.view];
        if (recognizer.state==UIGestureRecognizerStateBegan) {
            CGRect rect=[self.view convertRect:[imageView frame] fromView:[imageView superview]];
            beginX = imageView.center.x; 
            beginY = imageView.center.y;
            [vew setFrame:rect];
            [self.view addSubview:vew];
        }
        else
        {
            CGRect rect=imageView.frame;
            newCenter.x=(newCenter.x+Begin.x);
            newCenter.y=(newCenter.y+Begin.y);
            imageView.center=newCenter;
            if (CGRectIntersectsRect(rect, [AcceptingView frame])) {
                [AcceptingView setBackgroundColor:[UIColor lightGrayColor]];//Notifying that the AcceptingView will accept the icon
            }
            else
            {
                //change back to old color
            }
        }
        if (recognizer.state==UIGestureRecognizerStateEnded)
        {
            CGRect rect=[imageView frame];
            if (CGRectIntersectsRect(rect, [AcceptingView frame])) {
                  //your method of adding the Image to acceptView
                 CGRect rect=[acceptView bounds];
                 rect.size=imageView.frame.size;
                 imageView.frame=rect;
                 [AcceptingView addSubView:imageView];
            }
            else//else part is means for if user drop the dragged view somewhere else other than AcceptingView
            {
                   //add image back to scrollView
            }
        }
    }
于 2013-02-26T15:51:49.847 に答える
1

コメントでUIに関する質問がいくつかありますが、階層内でビューを移動するように見せるための鍵は、実際に階層内で移動することであるという@Robは正しいです。ドラッグを開始すると...

CGRect newFrame = [gScrollView convertRect:imageView.frame toView:self.view];
imageView.frame = newFrame;
[self.view addSubview:imageView];

ジェスチャ レコグナイザーはそのままにしておく必要があります。

于 2013-02-26T15:46:13.483 に答える