2015-01-23 8 views
0

Я разрабатываю приложение со списком железнодорожных станций, и когда вы выбираете станцию ​​из списка, должно быть представление, которое показывает больше информации.ProMotion Screen lag

Для списка я использую PM::TableScreen

В там у меня есть этот метод, который вызывается, когда пользователь выбирает станцию:

def select_station(station) 
    open StationScreen.alloc.initWithStation(station) 
end 

И соответствующее StationScreen

class StationScreen < UIViewController 

    def initWithStation(station) 
    init.tap do 
     @station = station 
    end 
    end 

    def loadView 
    self.title = @station[:name] 
    @layout = StationLayout.new 
    self.view = @layout.view 
    end 

end 

Это дает следующее:

enter image description here

Эффекты гладкие, когда вы нажимаете кнопку «Назад».

Теперь я хотел бы перейти к Promotion :: Экран

StationScreen становится:

class StationScreen < PM::Screen 

    attr_accessor :station 

    def on_load 
    self.title = @station[:name] 
    @layout = StationLayout.new 
    self.view = @layout.view 
    end 

end 

И метод select_station:

def select_station(station) 
    open StationScreen.new(station: station) 
end 

Теперь задняя анимация очень странно. Обратите внимание, как изображение пока отображается некоторое время, а затем уходит.

enter image description here

Что я делаю неправильно и как реализовать это правильно с ProMotion::Screen?

ОБНОВЛЕНИЕ 1: Это исправлено. Примерами для ProMotion являются предположение о неправильном.

def load_view 
    self.title = @station[:name] 
    @layout = StationLayout.new 
    self.view = @layout.view 
end 

Это правильный способ сделать это?

+0

Рад, что вы поняли это, @egze. Вы правы, что вы должны использовать 'load_view', а не' on_load'. Можете ли вы указать мне на ошибочную документацию, чтобы я мог ее исправить? –

+0

Вы должны поместить свое исправление в качестве ответа. –

ответ

0

После некоторых экспериментов я понял это. Существует несколько способов решить эту проблему:

1) С on_load. Ключевым моментом здесь является указание макета, что такое корневой вид. Затем он может правильно определить, как правильно выполнить обратную анимацию. Если вы не дадите ему root, как я и сделал в начале - анимация назад может сломаться. (По крайней мере, так я это понял).

def on_load 
    @layout = StationLayout.new(root: self.view) 
    @layout.build 
end 

2) С load_view. Здесь, по какой-то причине, он отлично работает без указания корневого представления. Я предполагаю, что это происходит автоматически, когда вы присваиваете представление self.view макетам.

def load_view 
    @layout = StationLayout.new 
    self.view = @layout.view 
end 

В итоге я использовал on_load.