使用 CAGradientLayer 类更改 UiView IOS 的渐变背景层颜色
Changing Gradient Background layer color for UiView IOS using CAGradientLayer classe
我想在触发动作时更改渐变背景的颜色。
我尝试了很多方法都没有成功。
BackgroundLayer.h
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
@interface BackgroundLayer : NSObject
+(CAGradientLayer*) greyGradient;
+(CAGradientLayer*) blueGradient;
@end
BackgroundLayer.m
@implementation BackgroundLayer
//Metallic grey gradient background
+ (CAGradientLayer*) greyGradient {
UIColor *colorOne = [UIColor colorWithWhite:0.9 alpha:1.0];
UIColor *colorTwo = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.85 alpha:1.0];
UIColor *colorThree = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.7 alpha:1.0];
UIColor *colorFour = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.4 alpha:1.0];
NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, colorThree.CGColor, colorFour.CGColor, nil];
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:0.02];
NSNumber *stopThree = [NSNumber numberWithFloat:0.99];
NSNumber *stopFour = [NSNumber numberWithFloat:1.0];
NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, stopThree, stopFour, nil];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
return headerLayer;
}
//Blue gradient background
+ (CAGradientLayer*) blueGradient {
UIColor *colorOne = [UIColor colorWithRed:(120/255.0) green:(135/255.0) blue:(150/255.0) alpha:1.0];
UIColor *colorTwo = [UIColor colorWithRed:(57/255.0) green:(79/255.0) blue:(96/255.0) alpha:1.0];
NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil];
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:1.0];
NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
return headerLayer;
}
@end
在我的视图控制器中,我有一个接近开关(我使用 ibeacon)。
开关有 4 种情况。我想要带有蓝色渐变的 Case 1(Far)。具有灰色渐变的情况 2(近)。我使用“(void)viewWillAppear:(BOOL)animated”中的层进行初始化,然后我在 did 范围委托中尝试了该层:
case CLProximityFar:
{
[[[self.view.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
self.bgLayer = [BackgroundLayer blueGradient];
self.bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:self.bgLayer atIndex:0];
....
不工作。
我也这样试过
case CLProximityNear:
{
[[[self.view.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
CAGradientLayer *gradient = [[self.view.layer sublayers] firstObject];
gradient = [BackgroundLayer blueGradient];
[self.view.layer insertSublayer:gradient atIndex:0];
[self.view.layer setNeedsDisplay];
....
不工作。
有人可以帮助我吗?我需要一个解决方案,用于在我打开 "near" 时更改背景颜色,并在我打开 "far".
时将其重新更改回来
在此先感谢您的帮助。
我没有使用iBeacon,所以在这个测试中,我使用了一个分段控件来在层之间切换。将其适应您的应用应该很容易。
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CAGradientLayer *bg = [BackgroundLayer greyGradient];
bg.frame = self.view.bounds;
[self.view.layer insertSublayer:bg atIndex:0];
}
-(IBAction)changeGradient:(UISegmentedControl *)sender {
CAGradientLayer *layerToRemove;
for (CALayer *aLayer in self.view.layer.sublayers) {
if ([aLayer isKindOfClass:[CAGradientLayer class]]) {
layerToRemove = (CAGradientLayer *)aLayer;
}
}
[layerToRemove removeFromSuperlayer];
CAGradientLayer *bg;
if (sender.selectedSegmentIndex == 0) {
bg = [BackgroundLayer greyGradient];
}else{
bg = [BackgroundLayer blueGradient];
}
bg.frame = self.view.bounds;
[self.view.layer insertSublayer:bg atIndex:0];
}
我想在触发动作时更改渐变背景的颜色。 我尝试了很多方法都没有成功。
BackgroundLayer.h
#import <Foundation/Foundation.h>
#import <QuartzCore/QuartzCore.h>
@interface BackgroundLayer : NSObject
+(CAGradientLayer*) greyGradient;
+(CAGradientLayer*) blueGradient;
@end
BackgroundLayer.m
@implementation BackgroundLayer
//Metallic grey gradient background
+ (CAGradientLayer*) greyGradient {
UIColor *colorOne = [UIColor colorWithWhite:0.9 alpha:1.0];
UIColor *colorTwo = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.85 alpha:1.0];
UIColor *colorThree = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.7 alpha:1.0];
UIColor *colorFour = [UIColor colorWithHue:0.625 saturation:0.0 brightness:0.4 alpha:1.0];
NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, colorThree.CGColor, colorFour.CGColor, nil];
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:0.02];
NSNumber *stopThree = [NSNumber numberWithFloat:0.99];
NSNumber *stopFour = [NSNumber numberWithFloat:1.0];
NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, stopThree, stopFour, nil];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
return headerLayer;
}
//Blue gradient background
+ (CAGradientLayer*) blueGradient {
UIColor *colorOne = [UIColor colorWithRed:(120/255.0) green:(135/255.0) blue:(150/255.0) alpha:1.0];
UIColor *colorTwo = [UIColor colorWithRed:(57/255.0) green:(79/255.0) blue:(96/255.0) alpha:1.0];
NSArray *colors = [NSArray arrayWithObjects:(id)colorOne.CGColor, colorTwo.CGColor, nil];
NSNumber *stopOne = [NSNumber numberWithFloat:0.0];
NSNumber *stopTwo = [NSNumber numberWithFloat:1.0];
NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil];
CAGradientLayer *headerLayer = [CAGradientLayer layer];
headerLayer.colors = colors;
headerLayer.locations = locations;
return headerLayer;
}
@end
在我的视图控制器中,我有一个接近开关(我使用 ibeacon)。 开关有 4 种情况。我想要带有蓝色渐变的 Case 1(Far)。具有灰色渐变的情况 2(近)。我使用“(void)viewWillAppear:(BOOL)animated”中的层进行初始化,然后我在 did 范围委托中尝试了该层:
case CLProximityFar:
{
[[[self.view.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
self.bgLayer = [BackgroundLayer blueGradient];
self.bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:self.bgLayer atIndex:0];
....
不工作。 我也这样试过
case CLProximityNear:
{
[[[self.view.layer sublayers] objectAtIndex:0] removeFromSuperlayer];
CAGradientLayer *gradient = [[self.view.layer sublayers] firstObject];
gradient = [BackgroundLayer blueGradient];
[self.view.layer insertSublayer:gradient atIndex:0];
[self.view.layer setNeedsDisplay];
....
不工作。
有人可以帮助我吗?我需要一个解决方案,用于在我打开 "near" 时更改背景颜色,并在我打开 "far".
时将其重新更改回来在此先感谢您的帮助。
我没有使用iBeacon,所以在这个测试中,我使用了一个分段控件来在层之间切换。将其适应您的应用应该很容易。
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
CAGradientLayer *bg = [BackgroundLayer greyGradient];
bg.frame = self.view.bounds;
[self.view.layer insertSublayer:bg atIndex:0];
}
-(IBAction)changeGradient:(UISegmentedControl *)sender {
CAGradientLayer *layerToRemove;
for (CALayer *aLayer in self.view.layer.sublayers) {
if ([aLayer isKindOfClass:[CAGradientLayer class]]) {
layerToRemove = (CAGradientLayer *)aLayer;
}
}
[layerToRemove removeFromSuperlayer];
CAGradientLayer *bg;
if (sender.selectedSegmentIndex == 0) {
bg = [BackgroundLayer greyGradient];
}else{
bg = [BackgroundLayer blueGradient];
}
bg.frame = self.view.bounds;
[self.view.layer insertSublayer:bg atIndex:0];
}