2015-07-06 4 views
18

Прежде чем объяснить мою проблему, важно сказать, что я уже реализовал предложение, сделанное в this question, и я думаю, что мои сомнения в этом методе animateWithDuration совершенно разные, несмотря на то, что оба вопроса имеют очень похожий заголовок.UIView.animateWithDuration в Swift 2.0?

Итак, я новичок Swift, и я делаю небольшие проекты в Swift, основанные на предыдущих демонстрациях Objective C, которые я делал раньше.

Это мой объектный код C:

- (void)moveSideBarToXposition: (int) iXposition{ 

    [UIView animateWithDuration:0.5f 
          delay:0.1 
         options: UIViewAnimationOptionTransitionNone 
        animations:^{ self.mainView.frame = CGRectMake(iXposition, 20, self.mainView.frame.size.width, self.mainView.frame.size.height); } 

        completion:^(BOOL finished){ 
         if (self.isSidebarHidden==YES) { 
          self.isSidebarHidden = NO; 
         } 

         else{ 
          self.isSidebarHidden = YES; 
         } 
        }]; 
} 

И это мой Swift версия:

func moveSideBarToXposition(iXposition: Float) { 

    UIView.animateWithDuration(0.5, delay: 1.0, options: UIViewAnimationTransition.None, animations: {() -> Void in 

     self.contentView.frame = CGRectMake(iXposition, 20, self.contentView.frame.size.width, self.contentView.frame.size.height) 

    }, completion: { (finished: Bool) -> Void in 

     if isMenuHidden == true { 
      isMenuHidden = false 
     } else { 
      isMenuHidden = true 
     } 
    }) 
} 

И я получаю эту ошибку.

не может ссылаться на 'animateWithDuration' со списком аргументов типа '(распашные, задержка: распашные варианты: UIViewAnimationTransition, анимации:() -> Пустота, завершающие: (Bool) -> Пустота)'

Я прочитал документацию, но на самом деле я не уверен, в чем проблема.

Btw, я работаю над Xcode 7 и Swift 2.0

ответ

32

Вы передаете перечисление типа UIViewAnimationTransition в качестве аргумента, который требует ввести UIViewAnimationOptions (options аргумент)

Вот правильный синтаксис с правильным перечислением значение:

func moveSideBarToXposition(iXposition: Float) { 
    let convertedXposition = CGFloat(iXposition) 
    UIView.animateWithDuration(0.5, delay: 1.0, options: UIViewAnimationOptions.TransitionNone, animations: {() -> Void in 

     self.contentView.frame = CGRectMake(convertedXposition, 20, self.contentView.frame.size.width, self.contentView.frame.size.height) 

     }, completion: { (finished: Bool) -> Void in 

      // you can do this in a shorter, more concise way by setting the value to its opposite, NOT value 
      isMenuHidden = !isMenuHidden 
    }) 
} 
+0

Hi! Спасибо за ваш ответ. На самом деле, вы правы. (мой плохой, я не понял разницы между UIViewAnimationTransition.None и UIViewAnimationOptions.TransitionNone). Я исправил эту строку, но у меня все еще такая же проблема. Я просто удалил эту строку (self.contentView.frame = CGRectMake (iXposition, 20.0, self.contentView.frame.size.width, self.contentView.frame.size.height) ), и все это сработало. Но когда я вернусь, я получаю ту же ошибку, о которой я упоминал ранее. У тебя есть какой-нибудь совет? Я бы очень помог – Jadekin

+0

Ошибка, которую вы получаете с вставленной линией, для меня не имеет смысла, но проблема в том, что ваш метод 'moveSidebarToXposition' принимает аргумент типа' Float', который вы вставляете в 'CGRect' , который требует типа 'CGFloat'. Поэтому вам нужно преобразовать его так: 'let convertXposition = CGFloat (iXPosition)' и использовать 'convertXposition' в конструкции' CGRect' – imas145

+0

См. Мой обновленный ответ – imas145

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