2013-09-02 19 views
14

UIImageView modelinde gölge benzeri bir degrade oluşturmak istiyorum.UIImageView gibi gradyan/gölgeler Flipboard gibi

bunun bir örneği bu resmin

http://taitegallery.net/wp-content/uploads/2012/01/flipboard-iphone.jpg

doğru iPhone'da görebileceğiniz gibi, altta ve üstte koyu meyili vardır bir resimdir. Bu, eğer resim beyazsa, beyaz metin hala görülebilir.

Bunu nasıl uygulayacağım konusunda herhangi bir öneriniz var mı? IOS geliştirme konusunda yeniyim, bu konuda da clueless. Teşekkürler!

+0

Nasıl sadece altını yapabilirsin? – SleepsOnNewspapers

cevap

20

Sen CAGradientLayer kullanabilirsiniz:

  1. projenize QuartzCore.framework ekleyin. (Bkz. Linking to Library or Framework).

  2. İthalat QuartzCore başlığı:

    #import <QuartzCore/QuartzCore.h> 
    
  3. söz konusu görünüme bir CAGradientLayer ekleyin. Örneğin, basit bir gradyan için griden beyaza:

    - (void)addGradientToView:(UIView *)view 
    { 
        CAGradientLayer *gradient = [CAGradientLayer layer]; 
        gradient.frame = view.bounds; 
        gradient.colors = @[(id)[[UIColor lightGrayColor] CGColor], 
             (id)[[UIColor whiteColor] CGColor]]; 
        [view.layer insertSublayer:gradient atIndex:0]; 
    } 
    

    Ya tekrar bir gri gölgesi, başka ve gelen:

    - (void)addGradientToView:(UIView *)view 
    { 
        CAGradientLayer *gradient = [CAGradientLayer layer]; 
        gradient.frame = view.bounds; 
        gradient.colors = @[(id)[[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] CGColor], 
             (id)[[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1.0] CGColor], 
             (id)[[UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1.0] CGColor]]; 
        [view.layer insertSublayer:gradient atIndex:0]; 
    } 
    

Sadece sizin dizideki renklerini değiştirmek İstenen etkiyi elde etmek için gradyanı değiştirmek için colors. Görüntü görünümünü kapsayıcı görünümüne koymak ve degradeyi görüntü görünümüne değil, kapsayıcı görünümüne uygulamak isteyebilirsiniz. Ayrıca, muhtemelen belirgin, ancak bu sizin UIImageView'unuzda kullandığınız görüntülerin saydam arka planlar kullandığını varsayar. Yapmazlarsa, bunları değiştirmelisiniz (a) degradeyi doğrudan resme dönüştürün; veya (b) görüntünün arka planını bir saydamlıkla değiştirin, böylece yukarıdaki CAGradientLayer efekti görülebilir.

+0

Merhaba @Rob, yukarıdaki örneğinizle ilgili olarak, kodları karıştırdım ve UIImageView'ımın en üstünde ve/veya altındaki ince bir degrade istediğim istenen sonuçları elde edebildim. 'De.colors' dizisi, bir (id) [[UIColor colorWithWhite: 0 alpha: 0.8] CGColor] ve bir (id) [[UIColor clearColor] CGColor] vardı. ClearColor, herhangi bir şeffaflık sorununu ele almak zorunda kalmadan altta yatan görüntüyü göstermeme izin verdi. Ve ben de 'view.backgroundColor = [UIColor clearColor]; Düzenlemeyi buna göre yapabilirseniz cevabınızı kabul edeceğim? –

+0

@Ryan backgroundColor'a tekrar ihtiyacın yok (gerekmediği halde diğer UIKit kontrollerine degradeler uygulanması yararlıdır ve kesinlikle buralara zarar vermez). Degradedeki clearColor'u kullanmakla ilgili olarak, yalnızca gradyanınız resmin üzerindeyse (yani ön planın renkleri de biraz etkilenecekse), sadece arka plan üzerindeki etkiyi ve bunun için clearColor'a ihtiyacınız varsa gereklidir. iş, sonra yanlış bir şey var.Genel görüntüyü kendisi üzerinde değil, UIImageView yerleştirildiği bir konteyner görünümünde degrade koydum.Ama, ne işe yarar .. – Rob

+0

Ben aslında bu degrade UIImageView kendisine uygulamak için çalışıyorum ve bu durumda resimdeki diğer görünümleri getirmem çünkü ihtiyaç duyduğum tek şey, altta koyu bir degrade olan bir görüntüdür, bu yüzden görüntüm hangi renk olursa olsun, metin yukarıdaki örnekte görüldüğü gibi okunabilir. Ama teşekkürler! –

0

Bu etkiyi, fotoğrafların üzerine koyulaştırılmış alanları içeren saydam bir görüntünün üzerine basmadan önce uygulamamda yaptım. Uygulama bilge, genellikle görünüm hiyerarşisinde fotoğrafınızın görünümünün üzerinde başka bir UIImageView ekleme anlamına gelir.

6

günümüzde düzgün sağ UIImageView tabakasının

// Set image over layer 
CAGradientLayer *gradient = [CAGradientLayer layer]; 
gradient.frame = imageView.frame; 

// Add colors to layer 
UIColor *centerColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.25]; 
UIColor *endColor = [UIColor grayColor]; 
gradient.colors = [NSArray arrayWithObjects: 
           (id)[endColor CGColor], 
           (id)[centerColor CGColor], 
           (id)[endColor CGColor], 
           nil]; 

[imageView.layer insertSublayer:gradient atIndex:0]; 

içine uygulayarak bu iş Swift dile çevrildi here

+1

Olması gerektiği fark ettim: gradient.frame = imageView.bounds – chinjazz

+0

Herkes bu dosyayı Swift'e çevirebilir mi? –

0

dan götürün:

var gradient = CAGradientLayer() 
gradient.frame = imageView.bounds      
let startColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.25) 
let endColor = UIColor.grayColor() 
gradient.colors = [startColor, endColor] 
imageView.layer.insertSublayer(gradient, atIndex: 0) 
1

SWIFT 3

let gradient = CAGradientLayer() 
    gradient.frame = imageView.bounds 

    let startColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.25) 
    let endColor = UIColor.gray 

    gradient.colors = [startColor.cgColor, endColor.cgColor] 
    imageView.layer.insertSublayer(gradient, at: 0) 
+0

bu kod benim resmimde bir şey yapmadı ... herhangi bir fikri neden? –

+0

.cgColor başlangıç ​​ve bitiş renginde yok. CAGradientLayer yalnızca UColor'ları değil, CGColors'u kabul eder –