www.state-it.info

Gran base de respuestas a las preguntas de los desarrolladores
Header decor

Como actualizar de forma dinámica las dimensiones de la CAGradientLayer?

Yapryntsew 2018-11-05 17:26:08

tengo una subclase de UIButton que yo quería agregar como fondo degradado. He creado una extension para el UIView y con la ayuda de este método, añado una capa con un degradado. Con este enfoque, las dimensiones de la capa no se modifican cuando se gira la pantalla, o cuando se utiliza .contentEdgeInsets. ¿Se puede solucionar este comportamiento, o existe otra forma de realización de la tarea actual?

Total answers: 2

ManWithBear 2018-11-05 18:15:06

Cambiar el tamaño de CALayer'a está completamente a su usuario.
Por lo tanto, usted necesita para cada cambio en el frame view, cambiar положиние / tamaño de la capa
Ejemplo:

class MyView: UIView {
    let gradient: CALayer 
    ...
    override func layoutSubviews() {
        super.layoutSubviews()
        gradient.frame = self.bounds
    }
}


Si todos te apetece a través de экстеншн, así:
private var gradientPropertyKey: UInt8 = 0
extension UIView {
    func addNiceGradient() {
        let gradient =  < тут ваш слой >
        layer.addSublayer(gradient)
        let observation = layer.observe(\.bounds) { [weak gradient] layer, _ in
            gradient?.frame = layer.bounds
        }
        objc_setAssociatedObject(self, &gradientPropertyKey, observation, .OBJC_ASSOCIATION_RETAIN)
    }
}

Pero funcionará peor, sí, y está seguro de que quiere en ObjC Runtime sin causa trepar?

Yapryntsew 2018-11-05 18:40:58

Gracias por предложанное solución. Pero me surgió otra pregunta. Su enfoque se basa en la creación de CALayer'y descendiente UIView. Pero me encantaría tener la solución implementada exclusivamente en el marco de la extension, le permite añadir el me la capa de una llamada a un método sin necesidad de crear CALayera en el proceso hijo. En tanto que esto es real?


ManWithBear 2018-11-06 12:48:57

Yapryntsew, ayer actualizada por la respuesta


YeahGarage 2018-11-05 17:30:38

Y si se pone el debajo de la capa de degradado más de área de relleno y el botón o debajo de la capa de añadir masksToBounds = true?

ManWithBear 2018-11-05 18:15:29

Muleta.


Yapryntsew 2018-11-05 18:27:46

Sí, he pensado en esta solución, pero todavía quiero algo más correcto.


YeahGarage 2018-11-05 18:31:30

Yapryntsew, Escribe entonces como encontrar una buena solución. Rara vez utilizo el degradado en los botones.


Yapryntsew 2018-11-05 18:43:12

YeahGarage, la solución propuesta por encima de mí, en general, me gusta, pero quiero todo el proceso de implementar una en un método de UIVIew sin la necesidad de la creación de CALayer'a la simiente de.


Preguntas relacionadas:

Footer decor

© www.state-it.info | Base of answers to questions for developers and programmers.