【问题标题】:Drag and Drop uimageview restrict drop area拖放 imageview 限制放置区域
【发布时间】:2014-03-10 14:30:05
【问题描述】:

我想在我的应用程序中实现拖放功能。这是我的要求, 我的视图控制器中有 5 个小图像和一个大图像。我需要将小图像放在大图像上。大图像的尺寸特别大。

当小图像被拖动并且它没有放在大图像上时,它会回到原来的位置。

当小图放在大图上时,它不能回到原来的位置,但可以拖到大图空间中。

谁能帮帮我?我可以找到很多教程,但没有一个是满意的。

我希望仅将图像放置在大图像空间中。而不是在图像视图之外。

请任何人帮助我!

谢谢!

【问题讨论】:

  • 您需要更具体。你有什么,哪些特定位不起作用?
  • @Wain 你能理解我的要求吗?
  • 是的,但是对于关于 SO 的问题,该要求过于宽泛,因此您需要更具体...
  • @Wain 你想让我编辑问题吗?

标签: ios uiview drag-and-drop uiimageview uitapgesturerecognizer


【解决方案1】:

正如其他人所说,你的问题太宽泛了。

不过,我建议继承 UIView 并使用 UIPanGestureRecognizer 检测抓取,然后移动视图。

当视图被释放时,调用一个函数来检查对象相对于其他视图的位置,并相应地与动画交换视图。如果视图在其原点的某个范围内,它会简单地通过动画快速返回。

您的 UIView 子类可能如下所示:

@interface DraggableView () <UIGestureRecognizerDelegate>

@property (nonatomic) float originX;

@end

@implementation DraggableView

-(id)initWithFrame:(CGRect)frame {
    self = [self initWithFrame:frame];

    UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(Touched:)];
    [pan setMinimumNumberOfTouches:1];[pan setMaximumNumberOfTouches:1];
    [pan setDelegate:self];
    [self addGestureRecognizer:pan];


    return self;
}

- (void) Touched:(id)sender {

    CGPoint translatedPoint = [(UIPanGestureRecognizer*)sender translationInView:self.superview];

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateBegan) {

        self.originX = [[sender view] center].x;

    }
    else {

        translatedPoint = CGPointMake(self.originX+translatedPoint.x, self.center.y);        
        [[sender view] setCenter:translatedPoint];

    }

    if([(UIPanGestureRecognizer*)sender state] == UIGestureRecognizerStateEnded)
    {

        // Check if view should swap or bounce back

    }

}

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 2022-09-24
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多