ios 横向模式下背景色只出现在屏幕的一半
ios background color only appears on half of screen in landscape mode
我目前正在使用以下方法设置视图的背景颜色
//Set the background color
CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; <---Calls method below
bgLayer.frame = self.view.bounds;
//self.view.layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer insertSublayer:bgLayer atIndex:0];
它是这样获取渐变色的-就是上面调用的方法
@implementation BackgroundLayer
//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
现在在肖像模式下,背景看起来很好。然而在横向模式下,它只覆盖了一半的屏幕,另一半是白色的。这是为什么 ?我该如何解决。我尝试了以下方法来改变颜色
self.view.layer.backgroundColor = [UIColor redColor].CGColor;
以上在横向和纵向模式下都可以正常工作,但它不是渐变。关于如何使渐变起作用的任何想法?
正确的代码行是:self.view.backgroundColor = [UIColor redColor];
您是否在设备旋转到横向时更新背景图层的框架?
显然你的问题可以从这个问题的答案中得到解决 here
您需要在设备旋转时添加新的渐变。
- (void)viewDidLayoutSubviews // called when device rotates
{
[self.bgLayer removeFromSuperlayer]; // you need to keep reference so you can remove the old layer
self.bgLayer = [BackgroundLayer blueGradient]; <---Calls method below
self.bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:self.bgLayer atIndex:0];
}
看@WenchenHuang的回答,比我的方法好
简单方法:
只需将此添加到您的 viewcontroller
-(void)viewDidLayoutSubviews{
self.bgLayer.frame = self.view.bounds;
}
更好的方法:
正如here描述的那样,你可以在这个way.I中使用我的Xcode测试它,它工作正常。
- 定义一个背景视图来管理大小
.h 文件
#import <UIKit/UIKit.h>
@interface BackgrundView : UIView
@end
.m 文件
#import "BackgrundView.h"
@interface BackgrundView()
@end
@implementation BackgrundView
+(Class)layerClass{
return [CAGradientLayer class];
}
@end
2 设置你想要的
#import "ViewController.h"
#import "BackgrundView.h"
@interface ViewController ()
@property BackgrundView * backgroundview;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.backgroundview = [[BackgrundView alloc] initWithFrame:self.view.frame];
self.backgroundview.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:self.backgroundview];
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 * graintLayer = (CAGradientLayer *)self.backgroundview.layer;
graintLayer.colors = colors;
graintLayer.locations = locations;
}
我目前正在使用以下方法设置视图的背景颜色
//Set the background color
CAGradientLayer *bgLayer = [BackgroundLayer blueGradient]; <---Calls method below
bgLayer.frame = self.view.bounds;
//self.view.layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer insertSublayer:bgLayer atIndex:0];
它是这样获取渐变色的-就是上面调用的方法
@implementation BackgroundLayer
//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
现在在肖像模式下,背景看起来很好。然而在横向模式下,它只覆盖了一半的屏幕,另一半是白色的。这是为什么 ?我该如何解决。我尝试了以下方法来改变颜色
self.view.layer.backgroundColor = [UIColor redColor].CGColor;
以上在横向和纵向模式下都可以正常工作,但它不是渐变。关于如何使渐变起作用的任何想法?
正确的代码行是:self.view.backgroundColor = [UIColor redColor];
您是否在设备旋转到横向时更新背景图层的框架? 显然你的问题可以从这个问题的答案中得到解决 here
您需要在设备旋转时添加新的渐变。
- (void)viewDidLayoutSubviews // called when device rotates
{
[self.bgLayer removeFromSuperlayer]; // you need to keep reference so you can remove the old layer
self.bgLayer = [BackgroundLayer blueGradient]; <---Calls method below
self.bgLayer.frame = self.view.bounds;
[self.view.layer insertSublayer:self.bgLayer atIndex:0];
}
看@WenchenHuang的回答,比我的方法好
简单方法:
只需将此添加到您的 viewcontroller
-(void)viewDidLayoutSubviews{
self.bgLayer.frame = self.view.bounds;
}
更好的方法:
正如here描述的那样,你可以在这个way.I中使用我的Xcode测试它,它工作正常。
- 定义一个背景视图来管理大小
.h 文件
#import <UIKit/UIKit.h>
@interface BackgrundView : UIView
@end
.m 文件
#import "BackgrundView.h"
@interface BackgrundView()
@end
@implementation BackgrundView
+(Class)layerClass{
return [CAGradientLayer class];
}
@end
2 设置你想要的
#import "ViewController.h"
#import "BackgrundView.h"
@interface ViewController ()
@property BackgrundView * backgroundview;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.backgroundview = [[BackgrundView alloc] initWithFrame:self.view.frame];
self.backgroundview.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
[self.view addSubview:self.backgroundview];
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 * graintLayer = (CAGradientLayer *)self.backgroundview.layer;
graintLayer.colors = colors;
graintLayer.locations = locations;
}