首页 > 代码库 > Masonry+拖动
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
Masonry+拖动
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。