Ios 拖放uimageview限制拖放区域

Ios 拖放uimageview限制拖放区域,ios,uiview,drag-and-drop,uiimageview,uitapgesturerecognizer,Ios,Uiview,Drag And Drop,Uiimageview,Uitapgesturerecognizer,我想在我的应用程序中实现拖放功能。这是我的要求, 我的视图控制器中有5个小图像和一个大图像。我需要将小图像放在大图像上。大图像具有特定的大小 当拖动小图像时,它不会放在大图像上,它会回到原来的位置 当小图像放在大图像上时,它不能回到原来的位置,但可以拖到大图像空间中 有人能帮我吗?我能找到很多教程,但没有一本是满意的 我希望图像只放在大图像空间中,而不是放在imageview之外 请任何人帮帮我 谢谢大家! 正如其他人所说,你的问题太宽泛了 不过,我建议将UIView子类化,并使用UIPange

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

当拖动小图像时,它不会放在大图像上,它会回到原来的位置

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

有人能帮我吗?我能找到很多教程,但没有一本是满意的

我希望图像只放在大图像空间中,而不是放在imageview之外

请任何人帮帮我


谢谢大家!

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

不过,我建议将UIView子类化,并使用UIPangestureRecognitor检测抓取,然后移动视图

释放视图时,调用函数检查对象相对于其他视图的位置,并相应地用动画交换视图。如果视图位于其原点的某个范围内,它将使用动画进行简单的捕捉

您的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

    }

}
@接口DragTableView()
@属性(非原子)浮动原点;
@结束
@实现DragableView
-(id)initWithFrame:(CGRect)帧{
self=[self initWithFrame:frame];
UIPanGestureRecognizer*pan=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(toucted:)];
[pan-SetMinimumNumberOfTouchs:1];[pan-SetMaximumNumberOfTouchs:1];
[代表:自我];
[自添加动作识别器:pan];
回归自我;
}
-(无效)触摸:(id)发送者{
CGPoint translatedPoint=[(UIPangestureRecognitor*)发送方翻译视图:self.superview];
if([(UIPangestureRecognitizer*)发送方状态]==UIgestureRecognitizerStateStart){
self.originX=[[sender view]center].x;
}
否则{
translatedPoint=CGPointMake(self.originX+translatedPoint.x,self.center.y);
[[sender view]设置中心:translatedPoint];
}
if([(UIPangestureRecognitizer*)发送方状态]==UIgestureRecognitizerStateEnded)
{
//检查视图是否应交换或反弹
}
}

您需要更具体一些。你有什么?有什么特殊的位不起作用?@Wain你能理解我的要求吗?是的,但是这个要求太宽泛了,所以你需要更具体一些…@Wain你想让我编辑这个问题吗?