2016-03-01 7 views
1

Мне нужно переместить UIButtons внутри представления, когда я нажимаю на изображение, и мне нужно переместить UIButtons из экрана, когда я снова нажимаю на то же изображение.Перемещение UIButtons назад, когда я нажимаю на изображение в swift

Когда я нажимаю на UIImage, 4 UIButtons перемещаются внутри экрана со следующим кодом без проблем.

func imageTapped(img: AnyObject) 
     {UIView.animateWithDuration(0.5, 
     delay: 0, 
     options: [.CurveEaseInOut, .AllowUserInteraction], 
     animations: { 
      self.imageReceivedTrashCan.center = CGPoint(x: 30, y: 530) 
      self.imageReceivedRightArrow.center = CGPoint(x: 285, y: 530) 
      self.imageReceivedForward.center = CGPoint(x: 160, y: 530) 
      self.imageReceivedCross.center = CGPoint(x: 30, y: 30) 
     }, 
     completion: { finished in 
      print("Objects moved!") 
    }) 
} 

Но я не мог найти способ, как я могу двигаться UIButtons обратно в исходные места, когда я нажимаю на одном изображении снова. Ценю вашу помощь.

+0

Похоже, вы всегда переместить кнопки (изображения) в? образ. Вам нужно проверить, находятся ли мусорные ведра, стрелки и т. Д. И вытаскивают их, если они есть. Поместите условный блок кода, который будет перемещать изображения назад. – wottle

ответ

3

Даже если это кажется действительно старая школа, ж/о любом autolayout и я случайно угадали вы не меняете в другом месте в центре и все центр с полуслова:

func imageTapped(img: AnyObject) { 
    if (self.imageReceivedTrashCan.center == CGPoint(x: 30, y: 530)) { 
     UIView.animateWithDuration(0.5, 
     delay: 0, 
     options: [.CurveEaseInOut, .AllowUserInteraction], 
     animations: { 
      self.imageReceivedTrashCan.center = CGPoint(x: -30, y: -530) 
      self.imageReceivedRightArrow.center = CGPoint(x: -285, y: -530) 
      self.imageReceivedForward.center = CGPoint(x: -160, y: -530) 
      self.imageReceivedCross.center = CGPoint(x: -30, y: -30) 
     }, 
     completion: { finished in 
      print("Objects moved!") 
    }) 
} else { 
UIView.animateWithDuration(0.5, 
     delay: 0, 
     options: [.CurveEaseInOut, .AllowUserInteraction], 
     animations: { 
      self.imageReceivedTrashCan.center = CGPoint(x: 30, y: 530) 
      self.imageReceivedRightArrow.center = CGPoint(x: 285, y: 530) 
      self.imageReceivedForward.center = CGPoint(x: 160, y: 530) 
      self.imageReceivedCross.center = CGPoint(x: 30, y: 30) 
     }, 
     completion: { finished in 
      print("Objects moved!") 
    }) 
} 
} 
+0

Большое вам спасибо. – OzzY

0
  • Во-первых, чтобы ответить на ваш вопрос:

вы можете сохранить исходное положение для каждой кнопки, то на втором кране вызов animateWithDuration:delay:options:animations:completion: и установить позицию self.imageReceivedTrashCan.center = initialPosition

Вы также можете попробовать с помощью методов перевода от CoreGraphics.

UIView.animateWithDuration(0.5, 
     delay: 0, 
     options: [.CurveEaseInOut, .AllowUserInteraction], 
     animations: { 
       self.imageReceivedTrashCan.transform = CGAffineTransformMakeTranslation(300, 0) 
       .... 
}, 
     completion: { finished in 
      print("Objects moved!") 
    }) 
} 

Затем на втором кране вернуться к тождественному преобразованию

UIView.animateWithDuration(0.5, 
     delay: 0, 
     options: [.CurveEaseInOut, .AllowUserInteraction], 
     animations: { 
       self.imageReceivedTrashCan.transform = CGAffineTransformIdentity 
       .... 
}, 
     completion: { finished in 
      print("Objects moved!") 
    }) 
} 
  • Но этот метод закодирован, вы должны использовать autoLayout, чтобы сделать этот вид анимации. Look at here

Надеется, что это поможет вам;)

0


Выберите ImageView, Гото атрибут инспектор и взаимодействия Проверь пользователь включен

UITapGestureRecognizer *TapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(moveMyView:)]; 
[imageview addGestureRecognizer: TapRecognizer]; 

- (void) moveMyView:(UITapGestureRecognizer*)sender { 

[UIView animateWithDuration:1.0 delay:0.0 options: 
UIViewAnimationOptionCurveEaseIn animations:^{ 
     self.imageReceivedTrashCan.center = CGPoint(x: -30, y: -530) 
     self.imageReceivedRightArrow.center = CGPoint(x: -285, y: -530) 
     self.imageReceivedForward.center = CGPoint(x: -160, y: -530) 
     self.imageReceivedCross.center = CGPoint(x: -30, y: -30) 
    } completion:^ (BOOL completed) {}]; 
}]; 

} 
Смежные вопросы