IOS開發(70)之拖拽手勢

來源:互聯網
上載者:User

1 前言
利用 UIPanGestureRecognizer 這個手勢辨識器, 來實現圖層的拖拽。


2 代碼執行個體
ZYViewController.m

 

[plain]
@synthesize helloWorldLabel; 
@synthesize panGestureRecognizer; 
 
- (void)viewDidLoad 

    [super viewDidLoad]; 
    self.view.backgroundColor = [UIColor whiteColor]; 
    /* Let's first create a label */ 
    CGRect labelFrame = CGRectMake(0.0f, /* X */ 
                                   0.0f, /* Y */ 
                                   150.0f, /* 寬 */ 
                                   100.0f); /* 高 */ 
    self.helloWorldLabel = [[UILabel alloc] initWithFrame:labelFrame]; 
    self.helloWorldLabel.text = @"Hello World"; 
    self.helloWorldLabel.backgroundColor = [UIColor blackColor]; 
    self.helloWorldLabel.textColor = [UIColor whiteColor]; 
    self.helloWorldLabel.textAlignment = NSTextAlignmentCenter; 
    //確保label可以互動的屬性,以便可以啟用其方法 
    self.helloWorldLabel.userInteractionEnabled = YES; 
    [self.view addSubview:self.helloWorldLabel]; 
    //建立拖拽手勢 
    self.panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self 
                                                                action:@selector(handlePanGestures:)]; 
    //無論最大還是最小都只允許一個手指 
    self.panGestureRecognizer.minimumNumberOfTouches = 1; 
    self.panGestureRecognizer.maximumNumberOfTouches = 1; 
    [self.helloWorldLabel addGestureRecognizer:self.panGestureRecognizer]; 

 
- (void) handlePanGestures:(UIPanGestureRecognizer*)paramSender{ 
    if (paramSender.state != UIGestureRecognizerStateEnded && paramSender.state != UIGestureRecognizerStateFailed){ 
        //通過使用 locationInView 這個方法,來擷取到手勢的座標 
        CGPoint location = [paramSender locationInView:paramSender.view.superview]; 
        paramSender.view.center = location; 
    } 

@synthesize helloWorldLabel;
@synthesize panGestureRecognizer;

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    /* Let's first create a label */
    CGRect labelFrame = CGRectMake(0.0f, /* X */
                                   0.0f, /* Y */
                                   150.0f, /* 寬 */
                                   100.0f); /* 高 */
    self.helloWorldLabel = [[UILabel alloc] initWithFrame:labelFrame];
    self.helloWorldLabel.text = @"Hello World";
    self.helloWorldLabel.backgroundColor = [UIColor blackColor];
    self.helloWorldLabel.textColor = [UIColor whiteColor];
    self.helloWorldLabel.textAlignment = NSTextAlignmentCenter;
    //確保label可以互動的屬性,以便可以啟用其方法
    self.helloWorldLabel.userInteractionEnabled = YES;
    [self.view addSubview:self.helloWorldLabel];
    //建立拖拽手勢
    self.panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                action:@selector(handlePanGestures:)];
    //無論最大還是最小都只允許一個手指
    self.panGestureRecognizer.minimumNumberOfTouches = 1;
    self.panGestureRecognizer.maximumNumberOfTouches = 1;
    [self.helloWorldLabel addGestureRecognizer:self.panGestureRecognizer];
}

- (void) handlePanGestures:(UIPanGestureRecognizer*)paramSender{
    if (paramSender.state != UIGestureRecognizerStateEnded && paramSender.state != UIGestureRecognizerStateFailed){
        //通過使用 locationInView 這個方法,來擷取到手勢的座標
        CGPoint location = [paramSender locationInView:paramSender.view.superview];
        paramSender.view.center = location;
    }
}
運行結果

 
 


拖拽後結果

 
 


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.