Сложная проблема с производительностью UIButton в UITableViewCell (iPhone) - PullRequest
0 голосов
/ 08 декабря 2010

Я собираюсь реализовать вид, аналогичный исходному приложению для фотографий в iOS.

Я создал настроенный UITableViewCell, в котором есть 4 кнопки UIB. И он обновляет изображение кнопки при изменении массива изображения ячейки.

Я усердно работал, чтобы получить действительно удовлетворяющее представление. Однако я обнаружил хитрую проблему с лагами.

Когда я пользуюсь своим приложением в обычном режиме, прокрутка очень плавная, без значительной задержки. Но если я оставлю приложение (симулятор) работающим в режиме «сетки в виде миниатюр», и переключусь на другие приложения в Mac OS. Через некоторое время (возможно, около 1 минуты), когда я переключаюсь обратно в симулятор, представление прокрутки застревает. Это трудно прокрутить. Если я нажимаю на что-то, переключаясь на другой вид, а затем переключаюсь назад, все снова становится гладким. Так сложно.

Я также попробовал TTRemoteExamples, который использует three20 для реализации вида сетки. Он также зависает после переключения между различными приложениями в Mac OS (не в iOS).

Затем я попытался заполнить пользовательскую ячейку не UIButton, а 4 изображениями. Это не застряло. Так может быть причина кроется в конфликте между UITableViewCell и UIButton?

Я не знаю, происходит ли это только на симуляторе или есть потенциальная проблема с производительностью при доставке на устройство (у меня нет устройства для тестирования).

Приложение Apple для фотографий никогда не будет таким.

Итак, я собираюсь реализовать его из UIScrollView самостоятельно, чтобы увидеть, не вызвана ли проблема механизмом UITableView. Я все еще хочу знать причину задержки, если кто-то пришел к ней и решил ее.

Извините за мой плохой английский, надеюсь, вы меня поймете.

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

Кого волнует, что делает симулятор, серьезно. Пусть он пукнет волшебными злыми феями, которые захватывают мировую финансовую систему, заставляя ее войти в мир краха ... о, подождите, может быть, он уже сделал это.

Если серьезно, посмотрите на использование кода, подобного AQGridView . Он очень стабилен, обеспечивает интерфейс, очень похожий на просмотр таблицы, и используется во многих проектах. Вы также избегаете глупостей Three20, идущих по этому маршруту. Это беспроигрышный вариант.

Но помните, всегда, и я имею в виду всегда, все равно, что ваше приложение делает на устройстве, если оно не делает то же самое на симуляторе, не беспокойтесь об этом, вы не должны тестировать на сим в 99% случаев все равно. Пользователи взаимодействуют с вашим приложением на своих устройствах, а не с вашим симулятором. :)

0 голосов
/ 09 декабря 2010

Ссылаясь на Subclassing UITableViewCell раздел в Table View Programming Guide for iOS, Я наконец-то решил проблему, применив свой собственный способ подражания руководству, не добавляя подпредставления к UITableViewCell.

Очевидно, добавление слишком большого количества подпредставлений, только 4 в моем коде, вызвало странную проблему, о которой я упоминал выше. Таким образом, НИКОГДА НЕ ДОБАВЛЯЙТЕ ОБСУЖДЕНИЯ , особенно те, в которых есть UIImageView, в contentView самого UITableViewCell или UITableViewCell.

Вместо этого сохраняйте данные в настроенном UITableViewCell и выполняйте все связанные с чертежами действия в drawRect, используя -[UIImage drawAtPoint:] и -[NSString drawAtPoint:withFont:].

Фактически, руководство Apple упомянуло это. Это небрежно с моей стороны снимать часть.

Однако мне все еще интересно, почему, как я уже говорил, это происходит только при переключении между приложениями в Mac OS, а не iOS. Я действительно не знаю причину.

...