Как бороться с ориентацией фонового изображения в UIView
Я использую настройку фонового изображения, используя методологию ниже. Когда я поворачиваю свое устройство, фон повторяется, что имеет смысл, потому что это не изображение. Как мне справиться с изменением ориентации, если именно так я настраиваю фоновое изображение?
- (void)viewDidLoad {
[super viewDidLoad];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"background.png"]];
self.view.backgroundColor = background;
[background release];
}
3 ответа
Мне потребовалось некоторое время, чтобы понять эту концепцию. Я не хотел создавать одинаковые изображения портрета и пейзажа. Ключевым моментом здесь является то, что CGAffineTransformMakeRotation
вращается из исходного состояния вашего UIImageView или любого UIView по этому вопросу. Это предполагает, что ваше фоновое изображение имеет ориентацию к нему. Например, вы хотите, чтобы ваш UIImageView оставался на месте, в то время как другие объекты ведут себя как обычное событие изменения ориентации.
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
duration:(NSTimeInterval)duration {
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
backgroundImage.transform = CGAffineTransformMakeRotation(M_PI / 2);
}
else if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight){
backgroundImage.transform = CGAffineTransformMakeRotation(-M_PI / 2);
}
else {
backgroundImage.transform = CGAffineTransformMakeRotation(0.0);
}
}
- (void)viewDidLoad {
[super viewDidLoad];
//set the UIImageView to current UIView frame
backgroundImage.frame = self.view.frame;
}
Если я правильно понимаю, ваш фон создается или перезаписывается каждый раз, когда вы меняете ориентацию вправо. По умолчанию backgroundColor
является nil
, Вы можете проверить это, если это ноль, тогда вы идете вперед и устанавливаете значения. Это как
if ( self.view.backgroundColor == nil){
//set the new values here
}
Вы должны сделать 2 изображения как по горизонтали, так и по вертикали, и вместо выделения вы можете использовать [...: colorWithPatternImage:...];
и установите его, когда ориентация меняется на фон вида.
СЧАСТЛИВЫЙ ИКОДИНГ...