Перетащите UIImageView из UIscrollView в другое представление - PullRequest
1 голос
/ 18 октября 2010

Я просканировал всю сеть, но ничего.

У меня есть для цикла до , создающего uiimageview внутри контроллера uiscrollview . Это коллекция изображений, которую вы можете прокрутить только по горизонтали .

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

Теперь, как я могу перетащить (не требуется перемещение, также копия зрения или идентификатор вида, все, что позволяет мне идентифицировать изображение) изображение из скроллера в другой вид ? Это как корзина для покупок, куда вы можете перетаскивать предметы внизу (корзина).

Как это:
enter image description here

Ответы [ 2 ]

1 голос
/ 10 июля 2013

Это альтернатива, использующая 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

0 голосов
/ 24 октября 2010

Я пытался реализовать это в своем приложении, и мне пришлось просто сдаться. Я вложил в подкласс UIImageview, как и вы (что является хорошим вариантом), и все мои изображения находятся в UIView, который является подклассом UIScrollView. Вы можете передать свой view-контроллер самим изображениям и изменить вид, к которому относится viewview, когда он достигает определенной границы (я переопределил touchesMoved на самих ImageViews). Проблема в том, что он не тянет постоянно. Пользователь должен буквально выбрать изображение снова, когда он перетаскивал изображение через определенную точку, потому что вы буквально переключаете представление uiimage с одного вида на другой.

Надеюсь, это поможет вам понять, по крайней мере, я действительно не нашел решения этой проблемы. Вы могли бы подумать, что многие приложения для IPad проложат путь для перетаскивания изображений в разные виды, и по этому вопросу появятся другие учебники!

...