2016-08-11 78 views
0

我正在寫一個可以在屏幕上拖動的自定義UIButton。當我按下這個按鈕時,uview會被添加到superview中。我爲這個視圖添加了平移手勢,所以它也可以拖動。 現在我想讓uiview和按鈕同時拖動。我怎樣才能做到這一點?
例如:
當按鈕移動時移動uiview

  • 如果我拖累了UIView或按鈕到一個點,其他的也將移動。你可以看到下面的圖片以獲取更多信息。
    enter image description here
+1

設置你的UIView框架尊重你的UIButton像UIView.center.x = UIButton.center.x + 20像這樣並且在按鈕移動時更新它,所以它總是隨着按鈕移動。 –

+0

兒子檢查我的code.It正常 – user3182143

回答

1

我將封裝的按鈕並在父透明的UIView的圖。將平移手勢添加到它並移動它們兩者然後移動。

+0

我想到這個解決方案。但我的自定義按鈕總是在屏幕上浮動,並有公共方法從其他課程調用。因此,當您按下此按鈕時,我必須將其添加到視圖中,不是嗎? –

0

我試着爲你的應用程序的示例代碼。它完美的作品。當你拖動按鈕,視圖也同時移動。

首先我創建了按鈕和UIView.I連接起來。

ViewController.h

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 
@property (strong, nonatomic) IBOutlet UIButton *btnDragg; 
- (IBAction)actionDragg:(id)sender; 
@property (strong, nonatomic) IBOutlet UIView *viewDrag; 

@end 

ViewController.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 


@synthesize btnDragg,viewDrag; 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    UIPanGestureRecognizer *panRecognizer; 
    panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(wasDragged:)]; 
    panRecognizer.cancelsTouchesInView = YES; 
    [btnDragg addGestureRecognizer:panRecognizer]; 
} 


- (void)wasDragged:(UIPanGestureRecognizer *)recognizer 
{ 
    UIButton *button = (UIButton *)recognizer.view; 

    CGPoint translation = [recognizer translationInView:button]; 
    CGPoint translationView = [recognizer translationInView:viewDrag]; 
    button.center = CGPointMake(button.center.x + translation.x, button.center.y + translation.y); 
    viewDrag.center = CGPointMake(viewDrag.center.x + translationView.x, viewDrag.center.y + translationView.y); 

    [recognizer setTranslation:CGPointZero inView:button]; 
    [recognizer setTranslation:CGPointZero inView:viewDrag]; 
} 

之前我拖動按鈕,它是在原來的位置enter image description here

然後當我拖動按鈕,在視圖還隨着按鈕移動。現在它在我拖動按鈕之後改變位置。 enter image description here