2011-06-30 8 views
0

私は、UIIableViewをUITableViewから別のビューにドラッグ&ドロップしようとしています。UIImageViewのコピーへのアタッチ

私はすべての点で作業しています。私はUIPanGestureRecognizerをサブクラス化し、このカスタムレコグナイザをテーブルビューにロードするすべてのUIImageViewにアタッチします。

私は、次のように、とりわけ、この一時的なビュー上に選択UIImageViewのコピーを追加し、アプリケーションキーウィンドウ上に一時的なビューを追加するために、認識のtouchesMovedメソッドをオーバーライド

UIView *dragAndDropView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]]; 
     dragAndDropView.backgroundColor = [UIColor whiteColor]; 

     [[UIApplication sharedApplication].keyWindow addSubview: dragAndDropView]; 

     ElementImageView * sourceImageView = (ElementImageView*)self.view; 

     ElementImageView *newImageView = [[ElementImageView alloc] initWithImage:sourceImageView.image]; 
     newImageView.userInteractionEnabled = YES; 
     newImageView.frame = [self.view convertRect:sourceImageView.frame toView:dragAndDropView]; 

     [dragAndDropView addSubview:newImageView]; 

このコードの結果、私は実際に私のdragAndDropView(私はdragAndDropViewの背景色を白に設定しているので、わかります)の上にソース画像ビューのコピーを取得します。そして、私が指を持ち上げてコピーした画像のビューに再び触れると、私は望む通りに画面上をドラッグできます。しかし、私は既存のタッチを新しいオブジェクトにシームレスに転送する方法を見つけることができません。

アイデア?

答えて

0

私はあなたのUIPanGestureRecognizerハンドラに次の操作を行うことができると思う:

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

if (recognizer.state == UIGestureRecognizerStateBegan) { 

    // the initial position 
    initialPanPositionX = self.transform.tx; 
    initialPanPositionY = self.transform.ty; 

    // create a copy of the imageview 
    panImage = [[UIImageView alloc] initWithImage:imageView.image]; 
    panImage.frame = imageView.frame; 

    [self.view addSubview:panImage]; 

} 
else if (recognizer.state == UIGestureRecognizerStateChanged) { 

    if (!startedMoving) { 
     startedMoving = YES; 

     [UIView beginAnimations:nil context:NULL]; { 
      [UIView setAnimationCurve:UIViewAnimationCurveEaseIn]; 
      [UIView setAnimationDuration:0.2f]; 

      // an effect to increase a copy a little bit when start dragging 
      CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, 1.2, 1.2); 

      panImage.bounds = CGRectApplyAffineTransform(panImage.bounds, zt); 

     } 
     [UIView commitAnimations]; 

    } 

    // translation 
    CGPoint point = [recognizer translationInView:self]; 
    panImage.transform = CGAffineTransformMakeTranslation(initialPanPositionX + point.x, initialPanPositionY + point.y); 


} 
else if (recognizer.state == UIGestureRecognizerStateEnded) { 

    startedMoving = NO; 

    // drop the imageView if it's inside the droppable view 


    [panImage release], panImage = nil; 

} 

} 

はそれがお役に立てば幸いです。

+0

ありがとうございました!自分の状況に違ったソリューションを適用しなければならない間に、私はタッチを移す必要がないことを理解できました。再度、感謝します! – wayne

関連する問題