【问题标题】:Drag an UIImageView from UIscrollView to another view将 UIImageView 从 UIscrollView 拖到另一个视图
【发布时间】:2010-10-18 16:04:23
【问题描述】:

我爬遍了所有的网络,但什么都没有。

我有一个 for 循环在 uiscrollview 控制器中创建 uiimageview。 这是一组图像,您可以水平滚动

for (int i = 0; i < NIMAGES; i++) {
    NSString *filename = [NSString stringWithFormat:@"image%d.png", i+1];
    ScrollerImage *iv = [[ScrollerImage alloc] initWithNibName:@"ScrollerImage" bundle:nil];
    [iv initWithImage:[UIImage imageNamed:filename]];
    iv.frame = CGRectMake(i * 320.0f, 0.0f, 320.0f, 150.0f);
    iv.exclusiveTouch = YES;
    iv.userInteractionEnabled = YES;
    [sv addSubview:iv];
    [iv release];
}

ScrollerImage 类是一个UIImageView 控制器

#import <UIKit/UIKit.h>
@interface ScrollerImage : UIImageView { 
}
@end

现在,我该如何拖动(不需要移动,也可以是视图的副本或视图的 id,任何可以让我识别图像的东西)从滚动到另一个视图? 它就像一个购物车,您可以在底部视图(购物车)中拖动项目。

像这样:

【问题讨论】:

标签: objective-c uiview drag-and-drop uiscrollview uiimageview


【解决方案1】:

这是一个替代方案,使用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

【讨论】:

    【解决方案2】:

    我一直试图在我的应用程序中实现这一点,我不得不放弃。我像你一样对UIImageview 进行了子类化(这是一个不错的选择),我所有的图像都在一个 UIView 上,它是UIScrollView 的子类。您可以将视图控制器传递给图像本身,并在图像视图达到某个边界时更改哪个视图是子视图(我自己覆盖了ImageViews 上的touchesMoved)。这样做的问题是它不会持续拖动。当用户将图像拖过某个点时,他们必须再次选择图像,因为您实际上是在将 uiimageview 从一个视图切换到另一个视图。

    我希望这至少能给你一些见解,我真的没有找到解决这个问题的方法。你会认为很多 iPad 应用程序会为将图像拖到不同的视图铺平道路,并且更多的教程会出现在这个问题上!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多