iOS 7很慢,用UIPickerView打开UITableViewController
根据这个问题和KyleC类的答案我已经实现了一个UITableViewController
有很多行依靠从核心数据提取。 每一行都显示一个简单的NSString
( NSString
的对象的名称),并隐藏一个UIPickerView
。
问题在于,当我点击前一个UITableViewController
中用picker视图打开UITableViewController
的行时,segue转换有一些延迟。
我知道这是因为之前的控制器(他们甚至执行核心数据请求)在转换中并不那么慢。
–
一些UIPickerView
可以使转换如此缓慢和相当丑陋? 我应该用哪种模式来判断哪个是慢罪?
更重要的是:如果缓慢来自UIPickerView
的数量,我该如何优化呢?
我想澄清的是,应用程序是非常轻,从Core Data提取的对象只有4, UIPickerView
4。
看起来,UIPickerViews和UIDatePickers从故事板(可能是xib的,但我没有尝试)加载非常缓慢。 在iPad Air上,需要大约3秒的时间才能在“hidden”单元中加载一个包含4个UIPickerViews和8个UIDatePickers的静态UITableViewController。 (3秒对于运行在最新和最好的硬件上的原生UI是永恒的!)
我发现的解决方法是在隐藏行显示之前以编程方式创buildUIPickerViews和UIDatePickers。 我所做的是在Interface Builder中创build空单元格,将这些单元格链接到IBOutlet属性,然后使用以下方法创buildDatePickers和Picker视图:
- (UIDatePicker*)datePickerForCell:(UITableViewCell*)cell { UIDatePicker * datePicker = [[UIDatePicker alloc] initWithFrame:cell.bounds]; [datePicker setDatePickerMode:UIDatePickerModeDateAndTime]; [datePicker addTarget:self action:@selector(pickerDateChanged:) forControlEvents:UIControlEventValueChanged]; datePicker.hidden = YES; [cell addSubview:datePicker]; return datePicker; } - (UIPickerView*)pickerViewForCell:(UITableViewCell*)cell { UIPickerView * picker = [[UIPickerView alloc] initWithFrame:cell.bounds]; [picker setDelegate:self]; [picker setDataSource:self]; picker.hidden = YES; [cell addSubview:picker]; return picker; }
这将UITableViewController的加载时间减less到十分之几秒,并且似乎不影响显示隐藏的tableview的animation。
注意:我尝试在viewDidAppear:方法中创buildselect器,但它似乎仍然延迟了UI。