У меня есть градиент фона, который красиво рисует, когда экран изначально отображается в портретном режиме. Однако, когда устройство повернуто в альбомный режим, правый 40% экрана черный (т. Е. Фон не нарисован на той части экрана, которая ранее не была нарисована). Я не знаю, как получить фон для перерисовки, чтобы заполнить весь экран.Невозможно получить градиент фона для заполнения всего экрана при вращении
Может ли кто-нибудь сказать мне, что я делаю неправильно? Благодаря!
Вот как это выглядит, когда изначально нарисовано.
И вот теперь он выглядит, когда я поворачиваю его:
Вот код для моего фона градиента класса:
#import "BackgroundGradient.h"
@interface BackgroundGradient()
@property (strong, nonatomic) UIView *view;
@end
@implementation BackgroundGradient
- (id) initWithView:(UIView *) view
{
if (!_view)
_view = view;
return self;
}
- (void) makeGradient
{
UIColor *darkOp = [UIColor colorWithRed:(193.0/255.0) green:(215.0/255.0) blue:(46.0/255.0) alpha: 1];
UIColor *lightOp = [UIColor colorWithRed:(222.0/255.0) green:(233.0/255.0) blue:(143.0/255.0) alpha: 1];
// Create the gradient
CAGradientLayer *gradient = [CAGradientLayer layer];
// Set colors
gradient.colors = [NSArray arrayWithObjects:
(id)darkOp.CGColor,
(id)lightOp.CGColor,
(id)darkOp.CGColor,
nil];
// Update the start and end points
gradient.startPoint = CGPointMake(0.5, 0.0);
gradient.endPoint = CGPointMake(0.5, 1.0);
// Set bounds
gradient.frame = self.view.bounds;
// Add the gradient to the view
[self.view.layer insertSublayer:gradient atIndex:0];
gradient.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.7],
[NSNumber numberWithFloat:0.9],
nil];
}
@end
И, наконец, вот как я экземпляр фонового объекта:
- (void)viewDidLoad
{
[super viewDidLoad];
self.background = [[BackgroundGradient alloc] initWithView:self.view];
[self.background makeGradient];
}
EDIT: Я добавил следующий код и включены обновления для начальных и конечных точек (выше):
- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
[self.background makeGradient];
}
Я почти там, но теперь, я получаю это. Обратите внимание, что по-прежнему существует вертикальная линия. Мне кажется, что новый фон нарисован behing предыдущий фон, чтобы предыдущий фон все еще присутствовал и блокирует новый фон. Это особенно заметно, когда происходит анимация от портрета к пейзажу.
Вы перерисовки градиент (от 'willAnimateRotationToInterfaceOrientation: продолжительность:', возможно), так что он получает новый повернутый кадр ? –
Нет. Это то, за чем я застрял. Как мне это сделать? – Alex
Вы пробовали какие-либо методы компоновки VC для обновления фрейма? – Wain