1

にドラッグ アンド ドロップ機能を追加したいUIButton。実際には、プログラムで の下に多数のボタンを作成しましたUIScrollView。次のターゲットを追加しますUIButton

[mybutton addTarget:self action:@selector(wasDragged:withEvent:)forControlEvents:UIControlEventTouchDragInside];

そしてこれが方法です

- (void)wasDragged:(UIButton *)button withEvent:(UIEvent *)event
 {
// get the touch

UIButton *myButton=[[UIButton alloc]init];
myButton=button;
[self.scrollView addSubview:myButton];

UITouch *touch = [[event touchesForView:button] anyObject];

//get delta
CGPoint previousLocation = [touch previousLocationInView:myButton];
CGPoint location = [touch locationInView:myButton];
CGFloat delta_x = location.x - previousLocation.x;
CGFloat delta_y = location.y - previousLocation.y;

//move button
myButton.center = CGPointMake(myButton.center.x + delta_x,myButton.center.y + delta_y);

}

このコードはスクロールビューの下で正常に機能し、ボタンはスクロールビュー内でドラッグアンドドロップされます。今問題は、スクロールビューの外にボタンをドラッグすると、ボタンが消えることです。スクロールビューの外にもボタンをドラッグしたい。これどうやってするの?Scrollviewから別のUIViewにボタンをドラッグするにはどうすればよいですか? それはどのように可能ですか?

4

3 に答える 3

1

コードを変更してこの問題を解決しました

[self.scrollView addSubview:myButton];

[self.view addSubview:myButton];
于 2012-11-01T12:57:01.840 に答える
1

ViewController.h

@interface ViewController : UIViewController <UIScrollViewDelegate>{
}

@property (nonatomic, strong) IBOutlet UIView *dropTarget;
@property (nonatomic, strong) UIImageView *dragObject;
@property (nonatomic, retain) UITextView *txt_View;
@property (nonatomic, strong) UIImageView *prevdragObject;
@property (nonatomic, assign) CGPoint touchOffset;
@property (nonatomic, assign) CGPoint homePosition;
@end

代わりに

 IBOutlet UIView *dropTarget 

ただ使う

IBOutlet UIScrollView *dropTarget 

ViewController.m

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
       if ([touches count] == 1) {
        // one finger
        CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
        for (UIImageView *iView in self.view.subviews) {
            if ([iView isMemberOfClass:[UIImageView class]]) {
                if (touchPoint.x > iView.frame.origin.x &&
                    touchPoint.x < iView.frame.origin.x + iView.frame.size.width &&
                    touchPoint.y > iView.frame.origin.y &&
                    touchPoint.y < iView.frame.origin.y + iView.frame.size.height)
                {
                    self.dragObject = iView;
                    self.touchOffset = CGPointMake(touchPoint.x - iView.frame.origin.x,
                                                   touchPoint.y - iView.frame.origin.y);
                    self.homePosition = CGPointMake(iView.frame.origin.x,
                                                    iView.frame.origin.y);
                    [self.view bringSubviewToFront:self.dragObject];
                }
            }
        }
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
   CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
   CGRect newDragObjectFrame = CGRectMake(touchPoint.x - touchOffset.x,
                                       touchPoint.y - touchOffset.y,
                                       self.dragObject.frame.size.width,
                                       self.dragObject.frame.size.height);
   self.dragObject.frame = newDragObjectFrame;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint touchPoint = [[touches anyObject] locationInView:self.view];
    if (touchPoint.x > self.dropTarget.frame.origin.x &&
    touchPoint.x < self.dropTarget.frame.origin.x + self.dropTarget.frame.size.width &&
    touchPoint.y > self.dropTarget.frame.origin.y &&
    touchPoint.y < self.dropTarget.frame.origin.y + self.dropTarget.frame.size.height )
    {
        self.dropTarget.backgroundColor = [UIColor colorWithPatternImage:self.dragObject.image];
    }
    self.dragObject.frame = CGRectMake(self.homePosition.x, self.homePosition.y, self.dragObject.frame.size.width, self.dragObject.frame.size.height);
    self.prevdragObject.frame = self.dragObject.frame;
}
于 2012-11-01T05:04:24.393 に答える
0

スクロール ビューと他のビューを含むビューまで、ドラッグ ロジックを移動する必要があります。ユーザーが上のビューでドラッグを開始すると、その下にあるサブビューを決定します。次に、そのビュー (ボタン) を元の親ビュー (スクロール ビュー) ではなく、この上位ビューのサブビューに再割り当てします。ドラッグが完了した場所に応じて、ボタンがスクロール ビューに追加されるか、他のビューにドラッグされます。

于 2012-11-01T05:07:04.870 に答える