我已经实现了以下功能:
我正在显示一个包含不同项目的全屏UICollectionView
。在此 View 下方(看不见)是其中一项的“详细” View 。
当用户长按 UICollectionView
项目之一时,我想隐藏 UICollectionView
以显示后面的“详细” View 。
然后我将实例化一个新的 UIView
,它悬停在该 View 上并且可以拖动。然后,用户可以将这个新的 UIView
拖放到“详细信息”屏幕上的位置。
我遇到的唯一问题是长按与可拖动 View 的同步。我希望用户长按 UICollectionView
,然后立即拖动可拖动 View 。
如何连接这两个操作?
此时 UICollectionView 调用下部 View 上的委托(delegate),该委托(delegate)实例化可拖动 View :
- (void)contactAlgorithm:(ContactAlgorithmViewController *)contactFlowViewController didLongPressContact:(CDContact *)contact {
DraggableContactView *draggableView= [[DraggableContactView alloc] initWithContact:contact];
[self.view addSubview:draggableView.view];
}
但是如何使这个可拖动 View 成为由 long.press 拖动的 View ?
最佳答案
首先获取长按的item的frame。 在该帧处添加可拖动 View 。
现在,将平移手势识别器添加到该 View 并将该手势的委托(delegate)设置为 viewController ,每当移动发生时委托(delegate)方法就会被调用。 更改可拖动 View 的框架以跟随触摸。
您可以使用viewController的touchesMoved方法来代替添加平移手势。
代码:
使用下面的代码,您可以拖动 View 而不使用平移手势。
//have a class property of DraggableContactView
@implementation ViewController{
DraggableContactView *dragableView;
}
longPressGestureRecogniser的选择器方法
-(void)longPress:(UILongPressGestureRecognizer *)ges{
if(dragableView==nil){
dragableView=[[DraggableContactView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
dragableView.backgroundColor =[UIColor greenColor];
[self.view addSubview:dragableView];
}
CGPoint p =[ges locationInView:self.view];
[dragableView setCenter:p];
}
关于ios - 长按不同 View 时创建可拖动的 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21363368/