2013-11-09 2 views
1

Я хочу установить градиентный фон для моего ImageView. Я нашел решение для этого здесь в Stack Overflow. Но это не удовлетворяет мои потребности.Установите градиентный фон для ImageView, вращение

Я хочу, чтобы градиент был слева направо. С моим кодом, который я нашел, я могу только заполнить его сверху донизу.

Я создаю слой градиента с этим кодом:

+ (CAGradientLayer *)colorGradientWithColor:(UIColor *)color 
{ 
    UIColor *colorOne = color; 
    UIColor *colorTwo = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.0f]; 

    NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil]; 

    NSNumber *stopOne = [NSNumber numberWithFloat:0.0]; 
    NSNumber *stopTwo = [NSNumber numberWithFloat:0.9]; 

    NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil]; 

    CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
    gradientLayer.colors = colors; 
    gradientLayer.locations = locations; 

    return gradientLayer; 
} 

Затем добавить слой к моему UIImageView:

CAGradientLayer *gradientLayer = [BackgroundGradient colorGradientWithColor:difficultyColor]; 
gradientLayer.frame = myImageView.bounds; 
[myImageView.layer insertSublayer:gradientLayer atIndex:0]; 

И вот результат:

enter image description here

И здесь моя настройка интерфейса:

enter image description here

Как вы можете видеть, есть два UIImageViews. Я хочу повернуть слой в виде градиента, поэтому он идет слева направо, а не как сейчас.

Со следующим фрагментом кода я могу повернуть все ImageView. Это единственный вид решает мою проблему, но я не хочу этого, потому что это вроде разрушает мой интерфейс ..

myImageView.transform = CGAffineTransformMakeRotation(M_PI*1.5f); 

Поэтому в основном я искал решение, чтобы сделать градиент слева направо, а не от сверху вниз.
У вас есть идеи? Я новичок в XCode и буду благодарен за каждый совет!

ответ

3

enter image description here Это результат я получил от ниже кода. Я думаю, это то, чего вы пытаетесь достичь

- (CAGradientLayer *)colorGradientWithColor:(UIColor *)color 
{ 
    UIColor *colorOne = color; 
    UIColor *colorTwo = [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:0.0f]; 

    NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil]; 

    NSNumber *stopOne = [NSNumber numberWithFloat:0.0]; 
    NSNumber *stopTwo = [NSNumber numberWithFloat:0.9]; 

    NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil]; 

    CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
    [gradientLayer setStartPoint:CGPointMake(0.0, 0.5)];//add these lines 
    [gradientLayer setEndPoint:CGPointMake(1.0, 0.5)]; 
    gradientLayer.colors = colors; 
    gradientLayer.locations = locations; 

    return gradientLayer; 
} 
+0

действительно полезно, спасибо !! – Pawan

0

Попробуйте повернуть свой слой перед добавлением его в изображение, используя преобразование.

0

Используйте начальную и конечную точку для gradient слоя:

BOOL horizontal = YES; 
//(YES for left to right or NO for top to bottom) 

gradientLayer.startPoint = horizontal ? CGPointMake(0, 0.5) : CGPointMake(0.5, 0); 

gradientLayer.endPoint = horizontal ? CGPointMake(1, 0.5) : CGPointMake(0.5, 1); 
Смежные вопросы