2015-05-14 17 views

Trả lời

8

Thêm lớp này vào dự án của bạn (nhanh chóng):

class UIGradientImageView: UIImageView { 

let myGradientLayer: CAGradientLayer 

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

func addGradientLayer(){ 
    if myGradientLayer.superlayer == nil{ 
     self.layer.addSublayer(myGradientLayer) 
    } 
} 

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

func getColors() -> [CGColorRef] { 
    return [UIColor.clearColor().CGColor, UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).CGColor] 
} 

func getLocations() -> [CGFloat]{ 
    return [0.5, 0.9] 
} 

func setup() { 
    myGradientLayer.startPoint = CGPoint(x: 0.5, y: 0) 
    myGradientLayer.endPoint = CGPoint(x: 0.5, y: 1) 

    let colors = getColors() 
    myGradientLayer.colors = colors 
    myGradientLayer.opaque = false 
    myGradientLayer.locations = getLocations() 
} 

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

UPDATE: giải pháp dịch Objective-C. Tín dụng cho @SleepsOnNewspapers.

#import "UIGradientImageView.h" 

@interface UIGradientImageView() 

    @property (nonatomic, strong) CAGradientLayer *myGradientLayer; 

@end 

@implementation UIGradientImageView 

-(instancetype)initWithFrame:(CGRect)frame{ 

if(self){ 
    self = [super initWithFrame:frame]; 
    self.myGradientLayer = [[CAGradientLayer alloc]init]; 
    [self setup]; 
    [self addGradientLayer]; 
    } 
return self; 
} 

-(instancetype)initWithCoder:(NSCoder *)aDecoder{ 

if(self){ 
    self = [super initWithCoder:aDecoder]; 
    self.myGradientLayer = [[CAGradientLayer alloc]init]; 
    [self setup]; 
    [self addGradientLayer]; 
    } 
    return self; 
} 

-(void)addGradientLayer{ 
if (self.myGradientLayer.superlayer == nil) { 
    [self.layer addSublayer:self.myGradientLayer]; 
} 
} 

Make lớp UIImageView của bạn trên kịch bản của bạn là một trong này thay vì mặc định.

enter image description here

+0

bất kỳ sự khác biệt nào giữa điều này và CGGradientLayer? Cũng là việc thực hiện điều này rất khác nhau trong mục tiêu c? – SleepsOnNewspapers

+0

..nên tương tự. Chỉ cần dịch từ nhanh sang Objective-C, mọi thứ đều có sẵn. –

+0

mã này sẽ không hoạt động. Nó không đưa vào tài khoản rằng uitableviewcells được vẽ lại – SleepsOnNewspapers

Các vấn đề liên quan