Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

491
Views
Bloqueo del hilo principal en el desplazamiento y Kingfisher configurando la imagen

He estado ejecutando un rendimiento de desplazamiento lento y he notado que cuando me desplazo y se llama a setImage con imágenes no almacenadas en caché, el rendimiento se retrasa mientras se realiza la descarga.

 if let imageURL = URL(string: presentable.imageUrl) { let resource = ImageResource(downloadURL: imageURL) photoView.kf.setImage(with: resource, options: [.transition(.fade(0.2))]) }

Tengo entendido que Kingfisher los descarga en un subproceso en segundo plano y luego los muestra en el subproceso principal, pero el subproceso principal parece estar bloqueado temporalmente. Eliminar el .transition no ayuda a la situación.

¿Alguna idea sobre cómo mejorar el rendimiento de mi desplazamiento? Gracias

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Cuando las imágenes son más grandes que la vista de la imagen, iOS necesita manipular objetos UIImage de gran tamaño, lo que puede causar tartamudeos observables en la interfaz de usuario. Puede evitar ese problema cambiando el tamaño de las imágenes antes de usarlas.

Afortunadamente, Kingfisher tiene un procesador que puede cambiar el tamaño de estos (en un subproceso de fondo) por usted. Como dice la hoja de trucos :

Uso de DownsamplingImageProcessor para imágenes de alta resolución

Piense en el caso en que queremos mostrar algunas imágenes grandes en una vista de tabla o una vista de colección. En el mundo ideal, esperamos obtener miniaturas más pequeñas para ellos, para reducir el tiempo de descarga y el uso de memoria. Pero en el mundo real, tal vez su servidor no prepare una versión en miniatura para usted. El recién agregado DownsamplingImageProcessor rescata [sic]. Reduce la muestra de las imágenes de alta resolución a un tamaño determinado antes de cargarlas en la memoria:

 imageView.kf.setImage( with: resource, placeholder: placeholderImage, options: [ .processor(DownsamplingImageProcessor(size: imageView.size)), .scaleFactor(UIScreen.main.scale), .cacheOriginalImage ])

Por lo general, DownsamplingImageProcessor se usa con .scaleFactor y .cacheOriginalImage . Proporciona una escala de píxeles de imagen razonable para su interfaz de usuario y evita descargas futuras al almacenar en caché la imagen original de alta resolución.

Creé una pequeña prueba con imágenes pequeñas y confirmé que era suave como la seda, pero cuando usé imágenes grandes, experimenté tartamudeos en el comportamiento de desplazamiento. Pero cuando agregué este DownsamplingImageProcessor en el escenario de imagen grande, volvió a ser suave como la seda.

over 4 years ago · Santiago Trujillo Report

0

Actualizando

 self.imageView.contentMode = .scaleAspectFill

para

 self.imageView.contentMode = .scaleAspectFit

hizo el truco para mí.

He incrustado UICollectionView dentro UITableViewCell . Cada UICollectionViewCell tiene una vista de imagen que carga la imagen desde la URL usando Kingfisher. El desplazamiento de mi vista de tabla era muy desigual e intenté diferentes cosas, incluido no vincular el modelo y configurar los datos a cada celda. Pero nada hizo ninguna diferencia en absoluto. Una vez que cambié el modo de contenido de la vista de imagen, ahora se desplaza muy suavemente.

Según la respuesta de Rob, también es posible que se requiera configurar el modo en .scaleAspectFill para realizar algún procesamiento, aunque el tamaño de la imagen es más pequeño (incluso 480 x 320 en mi caso). Después de actualizar el modo a .scaleAspectFit , ahora se desplaza suavemente incluso para imágenes de gran tamaño.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!