2013-02-26 27 views
1

我有UIScrollView包含許多UIImageViews。我需要從UIScrollView拖動UIImage到另一個視圖。但是我的代碼只在UIScrollView中拖動。我無法將圖像拖到scrollView之外。請幫我..我的代碼..從UIScrollView拖動UIImageView到另一個視圖

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]; 
} 
+1

嗯有趣的問題。嘗試setClipsToBounds:NO滾動視圖,看看它是否有所作爲。 – 2013-02-26 15:17:56

+0

在編碼之前,您希望應用程序知道用戶意圖在拖動其中一個子視圖和拖動以滾動之間的差異?也許使用兩個手指拖動拖動子視圖? – danh 2013-02-26 15:38:30

+0

@EgeAkpinar如果關閉裁剪,即使這種方式有效,也會產生問題,因爲一旦它關閉了滾動視圖,大概不希望它隨着滾動視圖的滾動而移動。底線,你只是想從滾動視圖中刪除它,並將其添加到您要刪除它的視圖。 – Rob 2013-02-26 15:39:44

回答

1

我有意見給你一對夫婦的UI問題,但@Rob是正確的,關鍵給移動視圖層次周圍的外觀是實際在層次結構中移動它。拖動開始時...

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

手勢識別器應保持完好。

2

一對夫婦的意見:

  1. 當拖動它關閉了滾動,你想從滾動視圖中刪除它,並把它添加到,例如,self.view。然後,您會做addSubview並相應地調整座標:

    newCenter = [self.view convertPoint:newCenter fromView:imageView.superview]; 
    [self.view addSubview:imageView]; 
    imageView.center = newCenter; 
    
  2. 確保滾動視圖設置clipsToBounds爲NO,這樣你就可以繼續看到它,你將其拖出。

  3. 請注意,我已更改此參考imageView.superview而不是滾動視圖。如果您在此處保留了滾動視圖引用,則必須添加條件檢查以確保圖像視圖尚未移出滾動視圖。

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 
      } 
     } 
    } 
+0

什麼是'[pageOriginalContainer框架]和'vew'在你的回答中? – IKKA 2013-02-27 05:32:18

+0

@ user1980105我編輯了我的答案 – 2013-02-27 05:38:40

+0

好的,謝謝... – IKKA 2013-02-27 05:41:28

相關問題