Но UIImageView не далеко отошел от CALayer. Без исходного кода сложно судить, но вроде как Вы модифицировали матрицу преобразований, вот только вместо банальных CGAffineTransformRotate сами высчитывали коэффициенты матрицы преобразований. Как академическая задача — шикарно, но как практическая… Не хотел бы я этот код поддерживать :)
Более того, я даже помню wwdc шное видео, где Apple рассказывала о одной своей «кубической» анимации в месенджере и проблемах, с которыми они столкнулись
меня наоборот порадовал новый дизайн. Но есть одна мелочь, которая портит все положительные эмоции — кнопка возврата в начало страницы. На PC мне, если честно, на эту кнопку как-то пофиг, но вот на планшете… держа девайс двумя руками я очень часто задеваю ее (еще с тостера тянется эта проблема) и это очень злит. пойди потом найди нужный комментарий или часть статьи. При этом при всем, в ios есть встроенный функционал возврата в начало страницы (тап по статус бару) и если мне уж нужно будет вернуться вначало, то я, скорей всего, воспользуюсь этой фичей. Я бы или убрал ее, или сделал опциональной в настройках
обожаю иронию.
А вообще, мне изначально показалось, что статья написана для хаба Разработка под iOS, вот я и вспылил. Только сейчас заметил, что это в первую очередь Блог компании Papa Buba Diop…
Не понимаю, зачем была написана эта статья. Простое уведомление о том, что была выпущена новая игра, или о том, что ревьюверы руководствуются сводом странных правил? И ладно бы в конце была ссылка на исходники проекта, но нет же… Решительно не понию… Статья уровня iphones.ru
Если это конечно не фейк, то спецэффекты там были.
Вначале ролика показана установка неплохой акустики. во время падения метеорита даже видно как дрожит вода в стакане. Ну и освещение тоже играет немаловажную роль. так с приближением метеорита «фонарь» все ярче начинает светить в лицо кандидатам.
Это связано с переиспользованием cell'ов в UITableView. Рассмотрим ситуацию, когда во время загрузки аватарки для 4 ячейки пользователь прокрутил таблицу вниз. Эта 4 ячейка (в блоке она фигурирует как cell) уже станет 10-15, из-за
[tableView dequeueReusableCellWithIdentifier:cellID]; и у нас получится так, что аватарка для 4 ячейки вдруг отрисовался у 10-15 ячейки.
Вы уверены? Есть предположение (да, пока только предположение), что имя приложения в апп сторе не уникально habrahabr.ru/qa/13373/ + ко всему оно у Вас же еще и не опубликовано…
Рекомендации по приложению или «то, что вызвало у меня дискомфорт»
— добавьте небольшую справку в начале первого уровня, так как при первом запуске не ясна цель игры. Читал я статью бегло, а обычный пользователь ее вообще не увидит. Я сразу подумал, что нужно как-то «правильно» порезать этот треугольник, а там оказывается просто игра на количество
-добавьте кнопку переиграть уровень (или она там есть, но ее не видно?). Иногда не хватает звездочек на новый уровень и приходиться возвращаться в главное меню…
— я бы все таки в меню покупок звездочек заменил знак «X» на "+", так как при их начальном количесве 0 у пользователя 0x10 все равно бы дало 0:) И судя по всему у Вас там именно добавление, а не примножение звездочек. Аналогично и в меню шаринга, а то возникает чувство, что какая-то операция в соц сетях стоит 5 звездочек.
Такое ограничение было введено совсем недавно из-за нехороших людей, отсылавших в стор приложение-побрякушку, которая проходила быстро ревью. Потом, внезапно, у программы менялись описание и скриншоты, после чего в сторе она начинала отображаться как очередной фар край, plan vs zombie или программа для черного списка на iphone. Многие пользователи, пропуская мимо ушей отзывы, часто прикрытые поддельными положительными, велись на такой развод. В итоге apple это надоело, вот она и прикрыла эту лазейку.
Мне пока не ясно, какой смысл Вы вложили в слово «страшновато»(синтаксис или использование рантайма?), но все же я попытаюсь расставить все точки над i.
Способ создания объекта, что описан в пунктах 1.1/1.2, очень похож на «дедовский», вот только класс собирается в рантайме.
Вот какие плюсы я вижу уже сейчас:
+ Блоки. Возможность использовать блок(а следовательно и все его плюшки) в качестве тела метода, да еще и в местах, где это изначально не было предусмотрено: делегаты, дата соурсы и прочее.
+ Прозрачность кода (?). Сразу видно, что происходит в данном участке кода. К примеру, использование делегатов в UIAlertView не очень удобно, особенно когда их количество в viewController'e превышает цифру 2 (не даром блоки первым же делом прикрутили к UIAlertView). И вот такое объявление по делегату на alert субьективно наглядней, чем куча if'ов и попытка опредления alertView'a, пославшего событие нажатия.
Ну и конечно нужно понимать, что доводить до крайностей не стоит, и объявление целого viewController'a анонимным классом, с переопределением 5-6 методов — откровенная глупость. Пункт возможно спорный.
+ остальные плюсы анонимных классов.
Но и о минусах я помню:
-Отсутствие контроля со стороны компилятора. Получение ошибки только на этапе выполнения, а не компиляции.
-Блоки. Несмотря на все достоинства блоков, их использование может легко привести к значительным утечкам. Делать вот так — плохая идея.
— Оверхед. Приходится создавать еще один класс+невнимательность может привести к созданию целой кучи таких анонимов, возможно тут поможет reuse идентификатор. Так же стоит учитывать Block_copy(со всеми вытекающими), который вызывается при создании IMP для метода.
— ARC. Как дела обстоят с ним пока даже не представляю.
— Синтаксис. Я не считаю это проблемой, лично мне встречались и пострашней конструкции, в конце концов, есть снипеты. Но все же проблема есть.
Да, минусов много, но ведь и плюсы есть. Возможно не все так страшно?
Спасибо за разъяснение. Самое смешное, что это делается еще проще. Это реализация из раздела Попытка 1, но с предварительной генерацией класса. Runtime позволяет это сделать очень просто, буквально в две строчки.
Моя же реализация была продиктована банальным желанием переопределять любой метод у уже существующего объекта, и не только созданного мной.
Вопрос в другом, стоит ли делать такую правильную реализацию? Комментарий bsideup поставил меня в тупик. Если сами Java разработчики в своей практике пытаются от этого избавится, то я даже не знаю…
www.cocoanetics.com/2012/08/cubed-coreanimation-conundrum/
weblog.invasivecode.com/post/29307073330/core-animation-transform-layer
Более того, я даже помню wwdc шное видео, где Apple рассказывала о одной своей «кубической» анимации в месенджере и проблемах, с которыми они столкнулись
обожаю иронию.
А вообще, мне изначально показалось, что статья написана для хаба Разработка под iOS, вот я и вспылил. Только сейчас заметил, что это в первую очередь Блог компании Papa Buba Diop…
Вначале ролика показана установка неплохой акустики. во время падения метеорита даже видно как дрожит вода в стакане. Ну и освещение тоже играет немаловажную роль. так с приближением метеорита «фонарь» все ярче начинает светить в лицо кандидатам.
1) подобная конструкция не является безопасной, так как используется один и тот же managedObjectContext в разных потоках.
И по-хорошему следует создать отдельный NSManagedContext для бэкграунда? Или я все же ошибаюсь?
2) Этот код загрузки изображения в ячейку таблицы может работать некорректно.
Это связано с переиспользованием cell'ов в UITableView. Рассмотрим ситуацию, когда во время загрузки аватарки для 4 ячейки пользователь прокрутил таблицу вниз. Эта 4 ячейка (в блоке она фигурирует как cell) уже станет 10-15, из-за
[tableView dequeueReusableCellWithIdentifier:cellID]; и у нас получится так, что аватарка для 4 ячейки вдруг отрисовался у 10-15 ячейки.
Вы уверены? Есть предположение (да, пока только предположение), что имя приложения в апп сторе не уникально habrahabr.ru/qa/13373/ + ко всему оно у Вас же еще и не опубликовано…
— добавьте небольшую справку в начале первого уровня, так как при первом запуске не ясна цель игры. Читал я статью бегло, а обычный пользователь ее вообще не увидит. Я сразу подумал, что нужно как-то «правильно» порезать этот треугольник, а там оказывается просто игра на количество
-добавьте кнопку переиграть уровень (или она там есть, но ее не видно?). Иногда не хватает звездочек на новый уровень и приходиться возвращаться в главное меню…
— я бы все таки в меню покупок звездочек заменил знак «X» на "+", так как при их начальном количесве 0 у пользователя 0x10 все равно бы дало 0:) И судя по всему у Вас там именно добавление, а не примножение звездочек. Аналогично и в меню шаринга, а то возникает чувство, что какая-то операция в соц сетях стоит 5 звездочек.
свороватьсделать так, что бы изобретение активно использовалось (популяризация).Способ создания объекта, что описан в пунктах 1.1/1.2, очень похож на «дедовский», вот только класс собирается в рантайме.
Вот какие плюсы я вижу уже сейчас:
+ Блоки. Возможность использовать блок(а следовательно и все его плюшки) в качестве тела метода, да еще и в местах, где это изначально не было предусмотрено: делегаты, дата соурсы и прочее.
+ Прозрачность кода (?). Сразу видно, что происходит в данном участке кода. К примеру, использование делегатов в UIAlertView не очень удобно, особенно когда их количество в viewController'e превышает цифру 2 (не даром блоки первым же делом прикрутили к UIAlertView). И вот такое объявление по делегату на alert субьективно наглядней, чем куча if'ов и попытка опредления alertView'a, пославшего событие нажатия.
Ну и конечно нужно понимать, что доводить до крайностей не стоит, и объявление целого viewController'a анонимным классом, с переопределением 5-6 методов — откровенная глупость. Пункт возможно спорный.
+ остальные плюсы анонимных классов.
Но и о минусах я помню:
-Отсутствие контроля со стороны компилятора. Получение ошибки только на этапе выполнения, а не компиляции.
-Блоки. Несмотря на все достоинства блоков, их использование может легко привести к значительным утечкам. Делать вот так — плохая идея.
— Оверхед. Приходится создавать еще один класс+невнимательность может привести к созданию целой кучи таких анонимов, возможно тут поможет reuse идентификатор. Так же стоит учитывать Block_copy(со всеми вытекающими), который вызывается при создании IMP для метода.
— ARC. Как дела обстоят с ним пока даже не представляю.
— Синтаксис. Я не считаю это проблемой, лично мне встречались и пострашней конструкции, в конце концов, есть снипеты. Но все же проблема есть.
Да, минусов много, но ведь и плюсы есть. Возможно не все так страшно?
Моя же реализация была продиктована банальным желанием переопределять любой метод у уже существующего объекта, и не только созданного мной.
Вопрос в другом, стоит ли делать такую правильную реализацию? Комментарий bsideup поставил меня в тупик. Если сами Java разработчики в своей практике пытаются от этого избавится, то я даже не знаю…
Ну и красавец XCode, куда же без него.