拖放imageview限制拖放区域

时间:2014-03-10 14:30:06

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

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

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

当小图像放在大图像上时,它无法回到原来的位置,但可以拖动到大图像空间。

任何人都可以帮助我吗?我可以找到很多教程,但没有人满意。

我希望图像只能放在大图像空间中。但不要超出图像视图。

请有人帮助我!

谢谢!

1 个答案:

答案 0 :(得分: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

    }

}