Как бороться с ориентацией фонового изображения в 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:...]; и установите его, когда ориентация меняется на фон вида.

СЧАСТЛИВЫЙ ИКОДИНГ...

Другие вопросы по тегам