2017-12-24 11 views
1

나는 collectionViewCell의 UILabel에 그라디언트를 추가하려고합니다.collectionView 셀에서 UILabel에 그라디언트 추가 - 빠른

extension UIView 
{ 
    func gradient(colors: [Any], startPoint: CGPoint, endPoint: CGPoint, opacity: Float, location: [NSNumber]?) { 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = bounds 
     gradientLayer.colors = colors 
     gradientLayer.startPoint = startPoint 
     gradientLayer.endPoint = endPoint 
     gradientLayer.opacity = opacity 
     gradientLayer.locations = location 
     layer.addSublayer(gradientLayer) 
    } 
} 

을 내 collectionViewCell에서 : :이 기능을 사용하고 그라데이션을 추가하려면

@IBOutlet weak var discount: UILabel! 

override func awakeFromNib() { 
    super.awakeFromNib() 
    discount.gradient(colors: [green,blue], startPoint: CGPoint(x: 0.0, y: 0.5), endPoint: CGPoint(x: 1.0, y: 0.5), opacity: 1, location: [0.5,0.5]) 
} 

을하지만 아무것도 표시되지 않는 것. 그림자 추가는 잘되지만 그라디언트를 추가하면 아무 것도 보이지 않습니다. 왜 그런 일이 일어 났습니까?

+0

@ 의미 - 중요 사항 게시물을 업데이트했습니다. –

+0

UILabel을 하위 클래스로 분류하고 해당 코드를 cellForRowAtIndexPath에 삽입하는 것이 좋습니다. ? –

+0

가장 먼저 눈에 띄는 점은 프레임이있는 경계선으로 그라디언트 레이어를 만들지 만보기의 경계로 동일하게 유지되지 않는다는 것입니다. 따라서보기 크기를 조정하면 그라디언트 레이어의 크기가 적절하게 조정되지 않습니다. 보기 크기가 어느정도인지는 기억이 나지 않지만 문제가 될 수 있습니다. –

답변

1

업데이트

override func layoutSubviews() { 
     discount.gradient(colors: [UIColor.blue.cgColor, UIColor.green.cgColor], startPoint: CGPoint.init(x: 0.5, y: 0.0), endPoint: CGPoint.init(x: 0.5, y: 1.0), opacity: 1.0, location: [0,1]) 
} 

로 collectionView 클래스

extension UIView 
{ 
    func gradient(colors: [CGColor], startPoint: CGPoint, endPoint: CGPoint, opacity: Float, location: [NSNumber]?) { 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = bounds 
     gradientLayer.colors = colors 
     gradientLayer.startPoint = startPoint 
     gradientLayer.endPoint = endPoint 
     gradientLayer.opacity = opacity 
     gradientLayer.locations = location 
     layer.addSublayer(gradientLayer) 
    } 
} 

전화를 귀하의 확장 테스트 및 작업. 내가 프레임이 항상 layoutSubviews으로 업데이트되어 있는지 확인하고자 뷰에 계층을 추가 할 때마다

enter image description here

+0

여전히 작동하지 않습니다. 그림자 작업을 추가했지만 작동하지 않는 그라디언트를 추가했습니다. –

+0

사용한 확장 기능을 변경했습니다. [임의] 색상이어야합니다. CGColor –

+0

아, 그 사실을 알지 못했습니다! CGColor 대신 UIColor를 보냈습니다. 고마워요! –

2

:

public override func layoutSubviews() { 
    super.layoutSubviews() 
    gradientLayer.frame = bounds 
} 

당신은 그라디언트 레이어로에 대한 참조를 유지해야합니다 보기의 속성

+0

여전히 작동하지 않습니다. –

0

당신의 목표는 다음에 다음 그라데이션 텍스트를 당신이해야한다 만드는 경우

  1. 가있는 UIView에 라벨을 삽입하고 (콘센트에 연결 (예를 들어 discountContainer)는
  2. 이을 볼 에 그라디언트 레이어를 추가 레이블 대신).
    discountContainer.gradient(colors: [green,blue], startPoint: CGPoint(x: 0.0, y: 0.5), endPoint: CGPoint(x: 1.0, y: 0.5), opacity: 1, location: [0.5,0.5])
  3. 의 의견 마스크로 레이블을 설정
    discountContainer.mask = discount

결과 :

enter image description here


편집 :

당신은 그라데이션을해야하는 경우 오직 배경에서만 CAGradientLayer에 대한 참조를 유지해야합니다.

extension UIView 
{ 
    func gradient(colors: [Any], startPoint: CGPoint, endPoint: CGPoint, opacity: Float, location: [NSNumber]?) -> CAGradientLayer { 
     let gradientLayer = CAGradientLayer() 
     gradientLayer.frame = bounds 
     gradientLayer.colors = colors 
     gradientLayer.startPoint = startPoint 
     gradientLayer.endPoint = endPoint 
     gradientLayer.opacity = opacity 
     gradientLayer.locations = location 
     layer.addSublayer(gradientLayer) 
     return layer 
    } 
} 

하고 collectionViewCell에

: 당신이 cocoapods를 사용한 경우

@IBOutlet weak var discount: UILabel! 
var gradientLayer: CAGradientLayer? 

override func awakeFromNib() { 
    super.awakeFromNib() 
    gradientLayer = discount.gradient(colors: [green,blue], startPoint: CGPoint(x: 0.0, y: 0.5), endPoint: CGPoint(x: 1.0, y: 0.5), opacity: 1, location: [0.5,0.5]) 
} 

public override func layoutSubviews() { 
    super.layoutSubviews() 
    gradientLayer?.frame = bounds 
} 
+0

아니요, 그라디언트가있는 배경을 원합니다. –

+0

작동하지 않습니다. 그것은 이상하지만 여전히 작동하지 않습니다. –

+0

내 대답 모두를 혼합해야한다고 생각합니다.보기에 레이블을 포함하고 해당보기에 그라데이션을 추가하고 그라디언트 프레임을 업데이트하여 layoutSubviews 메서드에서 해당보기의 경계와 같게 만듭니다. – arturdev

0

는 카멜레온 프레임 워크는 그라디언트 색상을 만드는 아주 쉬운 솔루션을 제공합니다. 그것을 사용하려면 cocoapods를 설치 한 다음 Chameleon Framework를 설치하십시오. 넣기

import ChameleonFramework 

맨 위 UIViewController.

설치 후 링크는 다음과 같습니다.당신은 스위프트를 사용하는 아래의 경우 코드의 라인으로 쉽게로

https://github.com/ViccAlexander/Chameleon#gradient-colors-1

그것은 그것 같이 보인다.

UIColor(gradientStyle:UIGradientStyle, withFrame:CGRect, andColors:[UIColor]) 

위의 코드 줄을 사용하여 UILabel의 배경을 설정하기 만하면됩니다.

관련 문제