2015-12-08 2 views
0

У меня есть globalstate в моем приложении. В зависимости от состояния графический интерфейс отличается.Swift: dispatch_async эффект несовместим для анимации

Когда я с самого начала View для просмотра B У меня есть globalstate Он должен показать информационный экран, но это не так. НО: Когда View B загрузится только один раз, и я перехожу из View C/D/E обратно в View B, тогда код работает отлично. (Вы должны быть в поле зрения А, чтобы получить в View B.)

Я использую много dispatch_async (dispatch_get_main_queue .. это не хороший стиль, это?

Почему моя анимация не загружается на ? начало Что такое хороший стиль Спасибо за ответы и извините за ошибки (английский не мой Родной)

override func viewDidLoad() { 
    super.viewDidLoad() 

    dispatch_async(dispatch_get_main_queue(), { 

     self.animateTheInformationViewWhenGlobalStateIsThree() 
    }) 

    } 


func animateTheInformationViewWhenGlobalStateIsThree() { 

    print("GLOGBALSTATE \(globalState)") //it is 3 


    if globalState == 3 { 

     setGlobalState(3) 

     dispatch_async(dispatch_get_main_queue(), { 
      GUITools.animateTheInformationView(self.tableView, animateBottomLayout: self.animationBottomConstraint, value: self.negativValue) 
     }) 

     print("THE POSITIV VALUE THE NEGATIV") 
    } 

// GUITools-Static-Class:

class func animateTheInformationView(tableView: UITableView, animateBottomLayout: NSLayoutConstraint, value: CGFloat) { 


    dispatch_async(dispatch_get_main_queue(), { 

    animateBottomLayout.constant += value 


     UIView.animateWithDuration(Constants.animationTime, animations: {() -> Void in 

      tableView.layoutIfNeeded() 

      },completion: { 
       (value: Bool) in 
     }) 

    }) 

} 

EDIT С viewDidAppear он работает. Но анимация - не настоящая анимация. ТаблицаView «перескакивает». Таким образом, нет скольжения/анимации.

Я удалил все dispatch_async ..

override func viewDidAppear(animated: Bool) { self.animateTheInformationViewWhenGlobalStateIsSeven() }

ответ

2

viewDidLoad() делает не означает, что ваша точка зрения уже видна. Поскольку пока не видно, вы не можете применять к нему анимацию. viewDidLoad() предназначен только для настройки вида контроллера просмотра и настройки иерархии представлений, то есть для добавления подсмотров.

Чтобы начать анимацию, как только вид станет (или стал), вы можете использовать viewWillAppear() (или viewDidAppear()).

Также все звонки dispatch_async, скорее всего, не нужны. Вам обычно нужны только они, когда вы находитесь не на основной (= UI) потоке. Просто удалите их.

+0

человек, большое спасибо! И спасибо за объяснение. – kuzdu

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