Я испытывал такое же вялое представление с модальной презентацией. Я пришел к решению, жертвуя некоторой памятью в пользу производительности.
ОБЩАЯ ИНФОРМАЦИЯ: Мое приложение было использовано Model-View-Controller-Store. Магазин был синглом, который заботился о моей модели, поэтому он был практически доступен из любого из моих классов после его создания. Я использовал класс Store, чтобы поддерживать некоторые дорогие классы (например, NSCalendar, NSDateFormatter и т. Д.) Через свойства.
РЕШЕНИЕ:
Я упаковал свойство UIDatePicker в магазине одноплодного, что позволило ему получить доступ через любой класс.
В интерфейсе Singleton:
@property (strong, nonatomic) UIDatePicker *datePicker;
В реализации Singleton я реализовал поглотитель для Datepicker.
- (UIDatePicker *)datePicker
{
if (!_datePicker) {
_datePicker = [[UIDatePicker alloc] init];
}
return _datePicker;
}
Это обеспечило Datepicker создавался только один раз, и она может быть доступна из любого места в моем приложении.
Теперь в методе viewDidLoad класса, где вам нужно будет использовать палитру, получить свойство через метод получения:
UIDatePicker *aDatePicker = [[MySingleton shareInstance] datePicker];
// Set it's location.
[aDatePicker setFrame:CGRectMake(0.0, 236.0, self.view.frame.size.width, 216.0)];
// Connect to any actions
[aDatePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
// Add it to you view
[self.view addSubview:[[MySingleton shareInstance] datePicker]];
Вялое поведение будет происходить в первый раз, когда выбор даты создается. Каждый раз модальное представление будет казаться невероятно быстрым (в зависимости от того, что у вас было в представлении).
По существу, я создавал глобальную переменную и поддерживал ее, чтобы мне не приходилось создавать ее каждый раз за счет памяти. Разница в производительности сделала его полезным в случае с приложениями.
ПРИМЕЧАНИЕ: Для удобства еще одно предупреждение. Поскольку datePicker, скорее всего, переживет модальное представление, обязательно убедитесь, что datePicker не указывает на какую-либо освобожденную память.
Так что, если «я» был назначен в качестве мишени в viewDidLoad:
[aDatePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
Очень важно, что в способе, такие как viewDidDisappear добавить этот код, чтобы предотвратить аварию:
[aDatePicker removeTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
делает это действительно нужно быть модальным viewcontroller? Как насчет только вида с белым фоном, 0,3 альфа с датой в нем? –
Я тоже это заметил. Я нажимаю ViewController на UINavigationController и испытываю такое же отставание. Было бы неплохо найти решение этого. – Joony