iOS: вращение вида, градиентный слой кнопки не изменяет размеры
У меня есть UIButton под названием nextbutton
в представлении. Я уже поставил autoresizing
эта кнопка в Interface Builder
, в viewDidLoad
Я называю этот метод, чтобы установить градиент для этой кнопки. gradientLayer
хорошо подходит для nextbutton
однако в портретном режиме приложения это не происходит в ландшафтном режиме. Любое предложение для этого? большое спасибо.
-(void)toSetGradientNextButtons{
CAGradientLayer* gradientLayer = [[CAGradientLayer alloc] init];
[gradientLayer setBounds:[nextbutton bounds]];
[gradientLayer setPosition:CGPointMake([nextbutton bounds].size.width/2,[nextbutton bounds].size.height/2)];
[gradientLayer setColors:[NSArray arrayWithObjects:(id)[[UIColor blueColor] CGColor],(id)[[UIColor cyanColor] CGColor], nil]];
[[nextbutton layer] insertSublayer:gradientLayer atIndex:0];
[gradientLayer release];
}
1 ответ
Я просто решил ту же проблему. Следующий метод вызывается для viewWillAppear и viewDidLayoutSubviews в моем коде.
Сначала я проверяю, есть ли у кнопки этот слой (из предыдущего состояния пользовательского интерфейса и / или поворота). Если это так, пользовательский слой удаляется. Затем он вставляет слой градиента, помечая его собственным именем, что позволяет легко найти его в первую очередь.
- (void)setupGradientOnLayoutSubviews
{
// First, we'll remove old custom gradient layer if present (e.g. on rotation)
for (__strong CALayer *layer in [[[self button] layer] sublayers]) {
if ([[layer name] isEqualToString: @"myCustomGradient"] == YES) {
[layer removeFromSuperlayer];
break;
}
}
// Configure the gradient
_gradientLayer = [[CAGradientLayer alloc] init];
_gradientLayer.frame = CGRectMake(0, 0, self.button.frame.size.width, self.button.frame.size.height);
_gradientLayer.masksToBounds = NO;
_gradientLayer.cornerRadius = 5.0;
_gradientLayer.colors = [NSArray arrayWithObjects:(id)[RGB(205, 6, 106) CGColor], (id)[RGB(147, 2, 76) CGColor], nil];
_gradientLayer.borderColor = [RGB(193, 5, 99) CGColor];
_gradientLayer.borderWidth = 1.0f;
_gradientLayer.shadowColor = [[UIColor blackColor] CGColor];
_gradientLayer.shadowOffset = CGSizeMake(1,1);
_gradientLayer.shadowRadius = 2;
_gradientLayer.shadowOpacity = 0.2;
_gradientLayer.name = @"myCustomGradient";
// Add the gradient layer
[self.button.layer insertSublayer:_gradientLayer atIndex:0];
}