iOS плъзгане UIImageView

Добре, така че винаги съм се чудил как всъщност да взема изглед на изображение и да го плъзгам. Планирах, когато плъзгам изглед на изображение и когато потребителят го постави на правилното местоположение, той се заключва там. Наистина нямам идея как да направя това и това ме притеснява от известно време.

Благодаря много предварително!


person Samuli Lehtonen    schedule 27.06.2011    source източник


Отговори (3)


Ако обичате да четете, вижте UIResponder Справка за клас и по-специално touchesBegan и touchesMoved.

person PengOne    schedule 27.06.2011
comment
Така че трябва да внедря този метод и да проследя координатите на докосването и след това да преместя imageView? - person Samuli Lehtonen; 28.06.2011
comment
@Samuli: Да... има някои добри фрагменти (напр. този ), които имат примери, но основно улавяте събитието с touchesBegan и го следвате с touchesMoved или touchesEnded. - person PengOne; 28.06.2011
comment
Добре, мисля, че вече разбирам. Предположих, че ще е доста по-трудно :) Благодаря! - person Samuli Lehtonen; 28.06.2011
comment
@Samuli: Аз също. Току-що започнах да работя с тези методи преди няколко седмици и трябва да кажа, че можете да направите някои невероятни неща с много малко код. Успех с проекта! - person PengOne; 28.06.2011

Или можете да използвате UIPanGestureRecognizer, ако не искате сами да подкласирате изгледа и да управлявате докосванията.

Създайте разпознавател на панорама във всеки клас (напр. контролер на изглед) и го добавете към вашия изглед:

UIPanGestureRecognizer * panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self
                                                                                 action:@selector(handlePanGesture:)];
[myDraggedView addGestureRecognizer:panRecognizer];

И след това просто:

- (void)handlePanGesture:(UIPanGestureRecognizer *)gestureRecognizer
{
    CGRect frame = myDraggedView.frame;
    frame.origin = [gestureRecognizer locationInView:myDraggedView.superview];
    myDraggedView.frame = frame;
}

Ако харесвате Interface Builder толкова, колкото и мен, можете също така просто да плъзнете разпознавател на панорамни жестове върху вашия изглед на изображение и след това да свържете разпознавателя към handlePanGesture:, който трябва да бъде деклариран като IBAction вместо void.

person Rivera    schedule 23.05.2013

Вече работих с това, но потребителят може да плъзга изображението свободно с позиция, която иска. и това е моят персонализиран клас с swift

class DraggableImageView: UIImageView {
      var beganPoint: CGPoint? = nil
      var originCenter: CGPoint? = nil
      override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
           if let position = touches.first?.location(in: superview){
                beganPoint = position
                originCenter = center
           }
      }
      override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
      }
      override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
           if let position = touches.first?.location(in: superview){
                let newPosition = CGPoint(x: position.x - (beganPoint?.x)!, y: position.y - (beganPoint?.y)!)
                center = CGPoint(x: (originCenter?.x)! + newPosition.x, y: (originCenter?.y)! + newPosition.y)
           }
      }
}

Просто използвайте този персонализиран клас с вашия UIImageView

person Leang Socheat    schedule 06.07.2017