CAGradientLayer - 不完全以横向方向覆盖视图

时间:2013-06-23 05:54:22

标签: iphone cagradientlayer

我使用this tutorial为我的应用创建了渐变背景。 它看起来很漂亮。但是,当我改变方向时会出现问题。

在纵向模式下看起来很合适,但在横向方向上,渐变不会覆盖整个视图。我上传了一个截图 -

http://www.screencast.com/t/c4vUv55Xq0

红色是渐变,蓝色部分是默认的背景颜色,应该被红色渐变完全覆盖。

如何覆盖整个视图?我试图在检测到旋转变化后调用渐变方法,但它不起作用。这是我使用的代码:

    [[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(deviceOrientationDidChangeNotification:)
     name:UIDeviceOrientationDidChangeNotification
     object:nil];// this is in 'viewWillAppear' method


- (void)deviceOrientationDidChangeNotification:(NSNotification*)note
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    [self addBackground];
}

1 个答案:

答案 0 :(得分:3)

我的猜测是系统在实际更新横向布局的视图层次结构之前发送UIDeviceOrientationDidChangeNotification

不是重做渐变以响应UIDeviceOrientationDidChangeNotification,而是在viewDidLayoutSubviews中执行此操作。当您的视图控制器收到viewDidLayoutSubviews时,其视图的框架已经针对新的界面方向进行了修改。这样的事情应该做:

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.background.frame = self.view.bounds;
}