De VVeboTableViewDemo a YYAsyncLayer (1)
Conozco VVeboTableViewDemo desde hace mucho tiempo y siempre quise estudiarlo. Recientemente, finalmente tuve tiempo de hacer VVeboTableViewDemo en Swift (VVeboTableViewDemo.swift). Pasé dos semanas leyendo una serie. de artículos sobre optimización de iOS Después de leerlos al menos una vez, descubrí que su resumen de puntos de optimización está muy disperso y la mayoría de ellos no son adecuados para un novato como yo.
Preguntas como esta:
Primero, eche un vistazo a la estructura de VVeboTableViewDemo (ya que lo traduje a Swift, usaré la versión de Swift para analizarlo a continuación, y el La lógica de la versión original es consistente.)
Entre ellos, DataPrensenter se extrae de VVeboTableView. En realidad lee datos, por lo que no necesita preocuparse por eso.
La imagen de arriba es todo el contenido de VVeboLabel. El método resaltado es el núcleo de VVeboLabel.
Esto pertenece a la tecnología Core Text, que es principalmente para el procesamiento especial de texto, utilizando dibujo línea por línea.
Los otros métodos son principalmente para resaltar texto y borrar contenido. que no es el foco.
En VVeboTableViewCell, el método resaltado es la parte principal. De hecho, la idea es exactamente la misma que VVeboLabel, que es dibujar el contenido de forma asincrónica en una imagen y luego mostrarlo para reducir la mezcla y reducir la presión de la GPU. No publicaré el código fuente, pero la demostración se publicará a continuación.
Esta es una clase muy inteligentemente diseñada. Antes de comenzar a estudiar las ideas de esta clase, te sugiero que leas este artículo. Por supuesto, si está lo suficientemente familiarizado con UIScrollView y este método func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity speed: CGPoint, targetContentOffset: UnsafeMutablePointer
Este método se introdujo desde iOS 5 y se llama antes de didEndDragging. Cuando la velocidad en el método willEndDragging es CGPoin.zero (no hay velocidad en ambas direcciones cuando finaliza el arrastre), la desaceleración en didEndDragging es falsa. Es decir, no hay ningún proceso de desaceleración y no se llamará a willBeginDecelerating y didEndDecelerating. Por el contrario, cuando la velocidad no es CGPoin.zero, la vista de desplazamiento utilizará la velocidad como velocidad inicial y desacelerará hasta targetContentOffset. Vale la pena señalar que targetContentOffset aquí es un puntero. Sí, puede cambiar el destino del movimiento de desaceleración, lo cual es muy útil al implementar algunos efectos.
Fuente del texto anterior
Además de reescribir UICollectionViewFlowLayout, el efecto de centrado deslizante horizontal de la lectura de WeChat también se puede lograr controlando targetContentOffset
El método resaltado en la figura está la parte central
Lógica de juicio de dibujo de celda
El código fuente de VVeboTableViewDemo anterior ha sido analizado completamente, por lo que mientras te maravillas con las ingeniosas ideas del autor, también debes estar muy impresionado Me gustaría saber el origen de esta tecnología y el proceso de mejora. (La siguiente es una suposición personal)
A través de este artículo, creo que debería comprender el texto principal, los gráficos principales, la vista de prueba de impacto y el dibujo asincrónico. Puede dominar los tres primeros a través de los siguientes artículos recomendados. Tecnología, dibujo asincrónico En la siguiente sección Análisis del código fuente de YYAsyncLayer, creo que dominarás esta tecnología sin saberlo.
Fuente original
Esta tecnología parece reducir la presión sobre la GPU, porque la mezcla de capas la realiza la GPU, y aquí la CPU casi no tiene nada que hacer, así que mueve la. Mezcla de GPU con la función Draw de la CPU (_ rect: CGRect) para completar los requisitos.
Demostración de desplazamiento rápido de esta tecnología
Razones de la obsolescencia de la tecnología
Debido a la aparición de las pantallas de retina, el número de píxeles por unidad de área ha aumentado y la Las tareas realizadas por la CPU también se han convertido en Si hay demasiadas, la eficiencia será peor que el método subViews.
Aparecen nuevas tecnologías como AsyncDisplayKit YYKit
Creo que la aparición de VVeboTableViewDemo también debería seguir el proceso anterior
Texto principal:
Artefacto de composición tipográfica Swift CoreText
Documentación oficial
Core Graphics:
Tutorial de dibujo de iOS
Swift: Deberías saber algo sobre Core Graphics
Demostración oficial
Demostración oficial Versión Swift
Creación de interfaces de usuario concurrentes en iOS
Cadena de respuesta
Evento de iOS cadena de respuesta Aplicación de vista de prueba de impacto
Procesamiento de eventos de iOS
Dibujo asincrónico
/ios-concurrency/