拖拽将UIView删除到其他视图以删除自己

时间:2016-10-30 08:03:52

标签: ios objective-c uiview

我正在对UIView进行子类化,使其始终浮动在我的应用程序屏幕上。我正在使用NSResponder touchesMove的某种方法,例如touchesEnd- (BOOL)isTrashViewReached { CGFloat distanceFromTrashView = sqrt(pow(self.center.x - self.trashView.center.x, 2) + pow(self.center.y - self.trashView.center.y, 2)); return distanceFromTrashView < self.bounds.size.width / 2; } -(void)updateTrashView { UIColor *trashColor = self.isTrashViewReached ? [UIColor whiteColor] : [UIColor colorWithRed:174/255.0 green:0 blue:0 alpha:1]; [self.deleteButton setTitleColor:trashColor forState:UIControlStateNormal]; } ...,以使此视图可以移动。
当我长按此浮动视图时,另一个名为“关闭视图”的视图将出现在屏幕底部。
现在我想要每当我拖拽时将此浮动视图拖放到关闭视图这将从超级视图中删除(当您从屏幕删除应用程序时,这将看起来像Android启动器)。但我不知道如何计算何时达到2个视图以移除浮动视图。
有人可以帮我解决这个问题吗?我为想象力画了一张照片 更新:
这是我的代码:

start

enter image description here

3 个答案:

答案 0 :(得分:0)

来自Drag an UIImageView from UIscrollView to another view,这将是一个很好的例子。

试一试:

这是另一种选择,使用UIGraphicsGetImageFromCurrentImageContext()

您可以在点击或某些事件后从currentScreen获取图像。接下来将其重新定位到屏幕并应用平移手势在屏幕上移动。

UIView *_DraggableView;
UIImageView *_imgvcChild1;

示例代码:

- ( void ) onScrollviewClickOrOtherEvent
{
  UIGraphicsBeginImageContext ( _DraggableView.frame.size );
  [ _DraggableView.layer renderInContext:UIGraphicsGetCurrentContext() ];

  UIImage *grab = UIGraphicsGetImageFromCurrentImageContext();
  UIGraphicsEndImageContext();

  if ( _imgvcChild1 ) [ _imgvcChild1 removeFromSuperview ];
  _imgvcChild1 = [[ UIImageView alloc ] initWithImage:grab ];
  _imgvcChild1.frame = _DraggableView.frame;
  _imgvcChild1.userInteractionEnabled = YES;
  [ self.view addSubview:_imgvcChild1 ];

  UIPanGestureRecognizer *pan = [[ UIPanGestureRecognizer alloc ] initWithTarget:self action:@selector(moveObject:) ];
  [ pan setMinimumNumberOfTouches:1 ];
  [ _imgvcChild1 addGestureRecognizer:pan ];
}

- (void) moveObject:(UIPanGestureRecognizer *)pan
{
  _imgvcChild1.center = [ pan locationInView:_imgvcChild1.superview ];
}

github上的示例项目:https://github.com/elpsk/Shopping-Cart

答案 1 :(得分:0)

您可以使用UIView.convert系列方法将点从一个视图坐标转换为另一个视图坐标。您可以测试rect是否包含一个点,或者两个rects是否与CGRect上的方法相交。在这里,我检查拖动视图的中心是否在目标rect的内部:

    let convertedCenter = targetView.convert(draggingView.center, from: draggingView)
    if targetView.frame.contains(convertedCenter) {

    }

答案 2 :(得分:0)

您可以使用CGRectIntersectsRect,CGRectContainsRect或CGRectContainsPoint函数来执行此操作。

if (CGRectContainsRect(deleteView.frame, selectedView.frame)) {
    NSLog(@"true");

}else{
    NSLog(@"false");

}