我想在我的应用程序中实现拖放功能。这是我的要求, 我的视图控制器中有5个小图像和一个大图像。我需要将小图像放在大图像上。大图像特别大。
当拖动小图像并且没有放在大图像上时,它会回到原来的位置。
当小图像放在大图像上时,它无法回到原来的位置,但可以拖动到大图像空间。
任何人都可以帮助我吗?我可以找到很多教程,但没有人满意。
我希望图像只能放在大图像空间中。但不要超出图像视图。
请有人帮助我!
谢谢!
答案 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
}
}