Перетаскивание определенного UIImageView - PullRequest
3 голосов
/ 16 февраля 2012

В моем коде у меня есть массив объектов, которые представляют собой UIImageViews с UIImages в них.

Я использую цикл for в -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event для перемещения всех объектов из массива один за другим.

Как только они будут перемещены в разные позиции на главном экране, я бы хотел иметь возможность захватить любой из этих объектов и переместить их в другое место.

Я не уверен, как лучше это сделать. Есть ли способ, которым я могу использовать прикосновения, чтобы перетаскивать только тот элемент, на который я нажал?

По сути, сейчас есть пять UIImageViews, и у каждого есть UIImage, и я пытаюсь добраться до точки, когда при нажатии на любую из них они могут перемещаться.

Ответы [ 4 ]

2 голосов
/ 16 февраля 2012

РЕДАКТИРОВАТЬ: Джон Мухов опубликовал это в блоге здесь .Вы должны быть в состоянии адаптироваться к вашим собственным целям.

//UIDraggableImageView.h
#import <UIKit/UIKit.h>

@interface UIDraggableImageView : UIImageView
{
    CGPoint currentPoint;
}

@end

//UIDraggableImageView.m
#import "UIDraggableImageView.h"

@implementation UIDraggableImageView

- (id)initWithImage:(UIImage *)image
{
    if (self = [super initWithImage:image]) {
        self.userInteractionEnabled = YES;
    }
    return self;
}

-(void)dealloc {
    [super dealloc];
}

- (void) touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event
{
    // When a touch starts, get the current location in the view
    currentPoint = [[touches anyObject] locationInView:self];
}

- (void) touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event
{
    // Get active location upon move
    CGPoint activePoint = [[touches anyObject] locationInView:self];

    // Determine new point based on where the touch is now located
    CGPoint newPoint = CGPointMake(self.center.x + (activePoint.x - currentPoint.x),
                                   self.center.y + (activePoint.y - currentPoint.y));

    //--------------------------------------------------------
    // Make sure we stay within the bounds of the parent view
    //--------------------------------------------------------
    float midPointX = CGRectGetMidX(self.bounds);
    // If too far right...
    if (newPoint.x > self.superview.bounds.size.width  - midPointX)
        newPoint.x = self.superview.bounds.size.width - midPointX;
    else if (newPoint.x < midPointX)  // If too far left...
        newPoint.x = midPointX;

    float midPointY = CGRectGetMidY(self.bounds);
    // If too far down...
    if (newPoint.y > self.superview.bounds.size.height  - midPointY)
        newPoint.y = self.superview.bounds.size.height - midPointY;
        else if (newPoint.y < midPointY)  // If too far up...
        newPoint.y = midPointY;

    // Set new center location
    self.center = newPoint;
}

@end
1 голос
/ 16 февраля 2012

Я сделал нечто подобное с большим успехом, используя UIPanGestureRecognizer в моем перетаскиваемом виде. Чтобы подключить это, это может выглядеть примерно так:

@implementation DraggableView

-(id)initWithFrame:(CGRect)frame
{
   ...
   ...
   UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)] autorelease];
   [self addGestureRecognizer:panGesture];
   ..
   return self;
}
@end

В вашем методе pan: вы можете проверить состояние жеста и даже зафиксировать местоположение жеста и использовать его для перемещения вашего вида. Вот грубый пример того, как это может выглядеть:

-(void)pan:(UIPanGestureRecognizer *)gesture
{

   if (gesture.state==UIGestureRecognizerStateChanged)
   {
      //We're moving!
      UIView *aRootView = <perhaps your root view controller's view>;
      CGPoint currentOrigin = [gesture translationInView:aRootView];
      self.frame = CGRectMake(currentOrigin.x,currentOrigin.y,self.frame.size.width,self.frame.size.hight);
      ...
      ...
   }

}

Вот еще чтение на UIPanGestureRecognizer.

0 голосов
/ 29 июля 2017

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

0 голосов
/ 16 февраля 2012

Возможно, вы захотите добавить средства распознавания жестов к представлениям, которые хотите переместить, чтобы вы могли легко определить, когда они касаются, и вы можете использовать touchSMoved, чтобы перемещать их ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...