拖动时显示 UIImageView 对象(使用 UILongPressGestureRecognizer)
Posted
技术标签:
【中文标题】拖动时显示 UIImageView 对象(使用 UILongPressGestureRecognizer)【英文标题】:Getting a UIImageView object to show up when dragging (with UILongPressGestureRecognizer) 【发布时间】:2014-02-16 22:15:54 【问题描述】:所以我正在尝试使用使用 ALAssets 框架获取的图像缩略图来实现拖放。
我能够让长按手势正常工作(根据一些 NSLog
测试,它肯定会移动某些东西)但我一生都无法弄清楚如何实际显示缩略图图像并拖动它在主视图中。请注意,_dNewImageView
是作为属性添加到视图控制器的 IBOutlet
。我正在尝试使用 BringSubviewToFront 将视图置于最前面:但是它没有按预期工作。任何帮助将不胜感激!
这是处理长按手势的函数:
-(void)longGestureRecognized:(UILongPressGestureRecognizer *)gestureRecognizer
gestureRecognizer.delaysTouchesBegan = YES;
CGPoint newPoint = [gestureRecognizer locationInView:self.collectionView];
switch (gestureRecognizer.state)
case UIGestureRecognizerStateBegan:
dIndexPath = [self.collectionView indexPathForItemAtPoint:newPoint];
if (dIndexPath == nil)
NSLog(@"Couldn't find index path");
dCell = (SKPhotoCell *)[self.collectionView cellForItemAtIndexPath:dIndexPath];
dImage = [UIImage imageWithCGImage:[dCell.asset thumbnail]];
_dNewImageView = [[UIImageView alloc] initWithImage:dImage];
[_dNewImageView setUserInteractionEnabled:YES];
[[self view] bringSubviewToFront:_dNewImageView];
break;
case UIGestureRecognizerStateChanged:
[_dNewImageView setCenter:newPoint];
break;
case UIGestureRecognizerStateEnded:
break;
【问题讨论】:
【参考方案1】:需要补充两点:
[self.view insertSubview:_dNewImageView aboveSubview:self.collectionView];
分配和初始化_dNewImageView
。
和
[gestureRecognizer setTranslation:CGPointZero inView:gestureRecognizer.view];
在您的手势识别方法中。
如果您按照代码建议重用_dNewImageView
,则不应在每次调用该方法时分配和初始化它。使用[_dNewImageView setImage:dImage];
此外,当您检查indexPath
是否存在时,请务必为该方法实现某种方式来返回或绕过图像内容。
例如:
- (void) someOtherMethod
_dNewImageView = [[UIImageView alloc] init];
_dNewImageView.frame = CGRectSomething;
_dNewImageView.userInteractionEnabled = YES;
[self.view insertSubview:_dNewImageView aboveSubview:self.collectionView];
- (void) longGestureRecognized:(UILongPressGestureRecognizer *)gestureRecognizer
...
case UIGestureRecognizerStateBegan:
...
if (dIndexPath == nil)
NSLog(...);
return; /*or*/ goto noIndexPath;
...
break;
//if used 'goto'
noIndexPath:
[gestureRecognizer setTranslation:CGPointZero inView:gestureRecognizer.view];
...
【讨论】:
感谢您的帮助!一切正常,除了 [gestureRecognizer setTranslation:CGPointZero inView:gestureRecognizer.view];这给出了错误读数:“UILongPressGestureRecognizer”没有可见的@interface声明选择器“setTranslation:inView:”我尝试将UILongPressGestureRecognizer添加为委托,但这是无效的。 确保您的@interface 包含以上是关于拖动时显示 UIImageView 对象(使用 UILongPressGestureRecognizer)的主要内容,如果未能解决你的问题,请参考以下文章
如何在PyQt5中使用QDrag拖动时显示QPushButton?