2012-05-14 36 views
12

Tôi đang làm việc để tạo giao diện người dùng tìm kiếm ưa thích bằng cách thêm gradient tuyến tính vào nút. Tuy nhiên tôi không chắc chắn tại đó chỉ số tôi cần phải thêm gradient. Mã mà tôi hiện đang đặt gradient trên hình ảnh/văn bản.iPhone iOS cách thêm gradient tuyến tính vào UIButton bên dưới văn bản hoặc hình ảnh của nút?

Làm cách nào để chèn một lớp con vào một UIButton trong lớp con văn bản/hình ảnh? Điều quan trọng là tôi phải giữ văn bản và hình ảnh của một nút có thể nhìn thấy!

+(void)addLinearGradientToView:(UIView*)view TopColor:(UIColor*)topColor BottomColor:(UIColor*)bottomColor 
{ 
    for(CALayer* layer in view.layer.sublayers) 
    { 
     if ([layer isKindOfClass:[CAGradientLayer class]]) 
     { 
      [layer removeFromSuperlayer]; 
     } 
    } 
    CAGradientLayer* gradientLayer = [CAGradientLayer layer]; 

    gradientLayer.startPoint = CGPointMake(0.5, 0); 
    gradientLayer.endPoint = CGPointMake(0.5,1); 
    gradientLayer.frame = view.bounds; 
    gradientLayer.colors = [NSArray arrayWithObjects:(id)[topColor CGColor], (id)[bottomColor CGColor], nil]; 
    // [view.layer addSublayer:gradientLayer]; 
    if(view.layer.sublayers.count>0) 
    { 
     [view.layer insertSublayer:gradientLayer atIndex:view.layer.sublayers.count-2]; 
    }else { 
     [view.layer addSublayer:gradientLayer]; 
    } 
} 
+0

Tôi đã viết một số mẫu mã để làm việc này: https://github.com/kristopherjohnson/gradientbuttons –

Trả lời

44

Thêm nó vào lớp nút tùy chỉnh của bạn:

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = customButton.layer.bounds; 

gradientLayer.colors = [NSArray arrayWithObjects: 
         (id)[UIColor colorWithWhite:1.0f alpha:0.1f].CGColor, 
         (id)[UIColor colorWithWhite:0.4f alpha:0.5f].CGColor, 
         nil]; 

gradientLayer.locations = [NSArray arrayWithObjects: 
          [NSNumber numberWithFloat:0.0f], 
          [NSNumber numberWithFloat:1.0f], 
          nil]; 

gradientLayer.cornerRadius = customButton.layer.cornerRadius; 
[customButton.layer addSublayer:gradientLayer]; 

nơi customButton là tùy chỉnh của bạn UIButton.

+1

giải pháp này không hoạt động 100%. Các nút có được một gradient, nhưng nó tràn vào các góc dưới cùng. Xem: https://www.dropbox.com/s/mguy6owuayjgxvc/Screen%20Shot%202012-09-03%20at%2017.50.30.png Làm cách nào để sửa lỗi này? – murze

+2

@murze Có vẻ như nút của bạn hoặc chế độ xem vùng chứa của nó thiếu thuộc tính clipsToBounds = YES được đặt. Thao tác này sẽ ghi lại tình trạng tràn mà bạn đang gặp phải. – Luke

+1

[gradientLayer.masksToBounds = YES]; <- làm điều đó – stackOverFlew

9

Đối với những gì bạn đang cố gắng để đạt được, luôn luôn chèn vào chỉ số 0.

tôi đã viết an article về các loại điều này thời gian gần đây mà bạn có thể thấy thú vị.

+0

Cảm ơn! Văn bản của tôi bị thiếu sau khi tôi thêm lớp gradient, nhưng chỉ trong iOS 6, iOS 7 vẫn hiển thị văn bản. Sau khi thay đổi thành Chèn nó bây giờ hoạt động cho cả hai. – KevinS

0

Đây là đoạn mã để đạt được điều này

CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = <#View Variable Name#>.bounds; 
gradient.colors = [NSArray arrayWithObjects:(id)([UIColor colorWithRed:0.337 green:0.596 blue:1.000 alpha:1.000].CGColor),(id)([UIColor colorWithRed:0.757 green:0.459 blue:1.000 alpha:1.000].CGColor),(id)([UIColor colorWithRed:0.310 green:0.835 blue:1.000 alpha:1.000].CGColor),nil]; 
gradient.startPoint = CGPointMake(0.5,0.0); 
gradient.endPoint = CGPointMake(0.5,1.0); 
[<#View Variable name#>.layer insertSublayer:gradient atIndex:0]; 

tôi có công cụ này mà làm cho nó dễ dàng để lựa chọn màu sắc của bạn và tự động đầu ra mã cho gradient. Rất thuận tiện tôi sử dụng nó hàng ngày itunes.apple.com/gb/app/gradient-creator/id1031070259?mt=12

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