ios - 制作一些可拖动的 UIView

标签 ios objective-c uiview uipangesturerecognizer

我想做一些可拖动的 UIView。
但是如果是下面的代码,你只能拖动你最后添加的一个 UIView。

enter image description here

我有这个代码。
LabelView类是UIView的子类。

ViewControlle.h

@interface ViewController : UIViewController

@property (nonatomic, strong) LabelView* labelView;

@end

ViewController.m

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    _labelView = [[LabelView alloc]initWithFrame:CGRectMake(100, 200, 200, 50)];
    [self.view addSubview:_labelView];

    UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    [_labelView addGestureRecognizer:pan];

    UIButton* addButton = [[UIButton alloc]initWithFrame:CGRectMake(270, 60, 40, 40)];
    [addButton addTarget:self action:@selector(newLabelView) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:addButton];
}

- (void)panAction:(UIPanGestureRecognizer *)sender
{
    CGPoint p = [sender translationInView:self.view];
    CGPoint movedPoint = CGPointMake(_labelView.center.x + p.x, _labelView.center.y + p.y);
    _labelView.center = movedPoint;
    [sender setTranslation:CGPointZero inView:self.view];
}

- (void)newLabelView
{
    _labelView = [[LabelView alloc]initWithFrame:CGRectMake(20, 60, 200, 50)];
    [self.view addSubview:_labelView];
    UIPanGestureRecognizer* pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
    [_labelView addGestureRecognizer:pan];
}

最佳答案

您应该为所有 View 应用getsture。然后改变方法。 _labelView.center = movedPoint;[sender view].center = movedPoint;

 - (void)panAction:(UIPanGestureRecognizer *)sender
{
    CGPoint p = [sender translationInView:self.view];
    CGPoint movedPoint = CGPointMake(_labelView.center.x + p.x, _labelView.center.y + p.y);
    [sender view].center = movedPoint;
    [sender setTranslation:CGPointZero inView:self.view];
}

关于ios - 制作一些可拖动的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23966359/

相关文章:

ios - FBSDK swift 3 出现 53 个错误

ios - 使用自动布局的 UITableViewCell 中的单个 UIImageView

ios - 如何在 Swift 中构建此设计

ios - 核心数据多对多关系。保存字符串数组

iphone - 我们如何找到由纬度或经度定义的两个位置之间的角度

ios - UIImageView - 无论如何要同时使用 2 种内容模式?

ios - Swift:覆盖属性类型的协议(protocol)扩展

objective-c - cocoa 教程中的字符串格式化

ios - UILabel 调整大小不起作用

ios - 给定一个 View ,我如何获得它的 viewController?