zoukankan      html  css  js  c++  java
  • Masonry+拖动

    最近遇到一个问题,用Masonry写的布局;

    拖动其中某个view,拖动方法按传统的写成如下形式。如果view中的label更改text值,拖动之后的view就会回到最初被设定的位置。

    - (void)objectDidDragged:(UIPanGestureRecognizer *)paramSender {
    
        if (paramSender.state != UIGestureRecognizerStateEnded && paramSender.state != UIGestureRecognizerStateFailed){
            //通过使用 locationInView 这个方法,来获取到手势的坐标
            CGPoint location = [paramSender locationInView:paramSender.view.superview];
            paramSender.view.center = location;
        }
    }

    经试验后,拖动方法需改为如下所示:

    //
    //  ViewController.m
    //  PanGesTest
    //
    //  Created by Vivien on 16/9/18.
    //  Copyright © 2016年 Vivien. All rights reserved.
    //
    #import "Masonry.h"
    #import "ViewController.h"
    
    @interface ViewController ()
    {
        
        NSTimer *timer ;
        int count;
        
        CGPoint panPoint;
    }
    @property (strong, nonatomic) UIView *panView;
    @property (strong, nonatomic) UILabel *countLabel;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
        
        _panView = [[UIView alloc]init];
        _panView.backgroundColor = [UIColor grayColor];
        [self.view addSubview:_panView];
        
        
        UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(objectDidDragged:)];
        //限定操作的触点数
        [panGR setMaximumNumberOfTouches:1];
        [panGR setMinimumNumberOfTouches:1];
        //将手势添加到draggableObj里
        [_panView addGestureRecognizer:panGR];
        
        [_panView mas_remakeConstraints:^(MASConstraintMaker *make) {
            make.top.mas_equalTo(self.view).offset(10);
            make.left.mas_equalTo(self.view).offset(30);
            make.width.mas_equalTo(150);
            make.height.mas_equalTo(50);
        }];
        
        _countLabel  = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 20)];
        [_countLabel setText:@"00000"];
        [_countLabel setTextColor:[UIColor redColor]];
        [_countLabel setTextAlignment:NSTextAlignmentCenter];
        [_countLabel setFont:[UIFont systemFontOfSize:13]];
        [_panView addSubview:_countLabel];
        
        [_countLabel mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.top.mas_equalTo(_panView);
            make.height.mas_equalTo(20);
        }];
        
         timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(countAdd) userInfo:nil repeats:YES];
        [timer fire];
    
        count = 0;
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (void)objectDidDragged:(UIPanGestureRecognizer *)sender {
        
        if (sender.state == UIGestureRecognizerStateBegan) {
            panPoint = [sender locationInView:_panView];
            
            NSLog(@"panPoint:%@",NSStringFromCGPoint(panPoint));
        }
        if (sender.state != UIGestureRecognizerStateEnded && sender.state != UIGestureRecognizerStateFailed)
        {
            CGPoint inViewLoction = [sender locationInView:self.view];//sender.view.superview
            CGPoint location = [sender translationInView:sender.view.superview];
            
            NSLog(@"locationInView:%@,translationInView:%@",NSStringFromCGPoint(inViewLoction),NSStringFromCGPoint(location));
    //        sender.view.center = inViewLoction;
            [_panView mas_remakeConstraints:^(MASConstraintMaker *make) {
                make.width.mas_equalTo(150);
                make.height.mas_equalTo(50);
                make.left.mas_equalTo(inViewLoction.x-panPoint.x);
                make.top.mas_equalTo(inViewLoction.y-panPoint.y);
    //            make.left.mas_equalTo(0).offset(inViewLoction.x-panPoint.x);
    //            make.top.mas_equalTo(0).offset(inViewLoction.y-panPoint.y);
            }];
            
            NSLog(@"className:%@",NSStringFromClass([sender.view.superview class]));
            [sender setTranslation:CGPointZero inView:self.view];
        }
    }
    
    - (void)countAdd
    {
        count ++;
        [_countLabel setText:[NSString stringWithFormat:@"%d",count]];
    }
    
    @end
  • 相关阅读:
    RF用户关键字
    RF循环分支
    RF使用
    RF变量
    RF介绍
    元件作用域
    元件介绍
    工作总结之测试
    港股通Level2介绍
    linux中配置yum源
  • 原文地址:https://www.cnblogs.com/developer-qin/p/5885171.html
Copyright © 2011-2022 走看看