2015-04-14 16 views

risposta

10

Suggerisco di creare una sottoclasse personalizzata di UIView (o UIImageView, se si desidera aggiungere la sfumatura a UIImageView). Nel metodo init della tua vista personalizzata, crea un CAGradientLayer e aggiungilo come sottolivello del livello della tua vista. Quindi imposta la sfumatura da nero a trasparente sul livello.

Probabilmente sarà necessario sovrascrivere layoutSubviews() e modificare le impostazioni sul livello sfumatura nel caso in cui i limiti della vista cambino.

EDIT:

ho creato un playground as a gist on github che è un esempio di lavoro di questo:

Il codice è simile al seguente:

import UIKit 
import AVFoundation 


class ImageViewWithGradient: UIImageView 
{ 
    let myGradientLayer: CAGradientLayer 

    override init(frame: CGRect) 
    { 
    myGradientLayer = CAGradientLayer() 
    super.init(frame: frame) 
    self.setup() 
    } 

    required init(coder aDecoder: NSCoder) 
    { 
    myGradientLayer = CAGradientLayer() 
    super.init(coder: aDecoder) 
    self.setup() 
    } 

    func setup() 
    { 
    myGradientLayer.startPoint = CGPoint(x: 0, y: 0) 
    myGradientLayer.endPoint = CGPoint(x: 1, y: 1) 
    let colors: [CGColorRef] = [ 
     UIColor.clearColor().CGColor, 
     UIColor(red: 0, green: 0, blue: 0, alpha: 0.3).CGColor, 
     UIColor(red: 1, green: 1, blue: 1, alpha: 0.5).CGColor, 
     UIColor(red: 0, green: 0, blue: 0, alpha: 0.3).CGColor, 
     UIColor.clearColor().CGColor ] 
    myGradientLayer.colors = colors 
    myGradientLayer.opaque = false 
    myGradientLayer.locations = [0.0, 0.3, 0.5, 0.7, 1.0] 
    self.layer.addSublayer(myGradientLayer) 
    } 

    override func layoutSubviews() 
    { 
    myGradientLayer.frame = self.layer.bounds 
    } 
} 


var aView = ImageViewWithGradient(frame: CGRect(x: 0, y: 0, width: 500, height: 500)) 
+0

Ciao @Duncan C Sto rivedendo la tua soluzione in questo momento, ma sto cercando di applicare questo effetto su un UIImageView esistente perché deve trovarsi all'interno di una cella riutilizzabile di una raccolta .. e non appare. Ho già testato il tuo parco giochi e adatto alla direzione del gradiente fino alle mie esigenze e sembra funzionare :) –

+0

Ok, quindi crea una sottoclasse personalizzata di UICollectionViewCell che utilizza uno di questi oggetti personalizzati ImageViewWithGradient invece di un UIImageView normale. –

+0

Ciao @Duncan C Sono già riuscito a farlo, è stato molto più semplice di quanto pensassi, ho appena realizzato la mia UIImage sullo storyboard per implementare ImageViewWithGradient. –

Problemi correlati