Быстрее всего Apple Style Flip Counter в нативном коде на iOS - PullRequest
1 голос
/ 01 октября 2011

Я бы хотел имитировать флип-счетчик в стиле Apple на iOS.

В частности, эта вещь будет летать быстро. Это не будильник, подумайте игрок, набравший больше очков, когда вы одновременно набираете очки. Счетчик может перепрыгнуть с 0 до 100, до 5000, он не будет увеличиваться последовательно, но когда он будет увеличиваться, он будет анимироваться до следующего числа в хорошем клипе, и он будет переходить к следующему целевому значению через секунду или две , Он также не будет иметь заданного числа разрядов, он может считать от 0 до 2 000 000, если захочет. Как игрок с высокими показателями, вы не знаете, что они в итоге получат. Поскольку оно не может быть отрицательным, теоретически максимум будет UINT_MAX

Я немного искал и нашел пару отличных ресурсов, ни один из которых не кажется мне правильным.

Это подход js / css, который теоретически может работать внутри UIWebView:

В этой статье объясняется, как выполнять перелистывание страниц в Core Animation. Он достаточно подробный, но мне кажется, что в нем отсутствуют некоторые ключевые компоненты, и это может привести к тому, что прикосновения будут игнорироваться в пользовательском интерфейсе, пока он переворачивается.

Теперь, прочитав их, у меня появилось несколько разных идей о том, как это сделать самостоятельно, пытаясь взвесить плюсы и минусы каждого подхода:

1) Загрузите html-счетчик в UIWebView.

  • Очевидные преимущества: возможно, многократное использование кода, быстрое и грязное
  • Очевидные недостатки: издержки UIWebView и постоянные звонки на stringByEvaluatingJavaScriptFromString из хост-приложения со следующим номером кажутся глупыми

2) Создание пользовательского спрайт-листа и использование базовой анимации

  • Очевидные преимущества: нативный код, кажется, это был бы менее бесполезный подход, чем использование веб-представления
  • Очевидные недостатки: создание пользовательских листов спрайтов на данный момент кажется немного бессмысленным перед лицом пользовательского чертежа, так как в любом случае я уже создаю вид с пользовательским чертежом. Похоже, что единственный способ заставить его работать хорошо - рисовать изображения на подслоях, а не использовать UIImageViews

3) Визуализация текста / округленных строк с помощью Core Graphics

  • Очевидные преимущества: 100% решение с собственным кодом, без изображений
  • Очевидные недостатки: лодка загружает больше кода, имеющего несколько экземпляров UIImage. Не знаю, смогу ли я получить правильный образ, который мне нужен, без изображений

4) Рендеринг всего с помощью OpenGL ES 2.0

  • Очевидные преимущества: полный контроль над рендерингом, возможно, лучшая производительность
  • Очевидные недостатки: мне кажется, что мне все еще, вероятно, понадобятся некоторые изображения для привязки к текстурам, возможно, накапливает больше кода, чем рендеринг основной графики в # 3

С одной стороны, я могу рационализировать это и сказать, что анимация будет длиться всего полсекунды или секунды, поэтому лучше всего просто подделать ее как-нибудь с размытыми изображениями и фактически ничего не анимировать. С другой стороны, мне кажется, что это именно то, для чего Core Animation + Core Graphics была разработана, и я должен их использовать.

Ответы [ 3 ]

4 голосов
/ 04 октября 2011

Закончилось рисование изображений с использованием спрайтов изображений.

код здесь https://github.com/reklis/flipcounter

1 голос
/ 27 июня 2012

enter image description here на коротком экране показывают как изображение справа налево, оригинал, так и левее самого изменяемого размера изображения flipCounter хорошо работает в XCode, но есть одна проблема, проблема в том, как я изменяю размер FlipCounter View. когда я изменяю исходное изображение с маленьким изображением, это плохо работает.! [это изображение на 50% меньше исходного изображения] [2] Я жду положительного ответа. Спасибо Advane

0 голосов
/ 01 октября 2011

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

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

...