Изменение изображения UIImagView, когда iPad меняет ориентацию
Я использую следующий код для изменения изображения UIImageView при изменении ориентации iPad
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
if((self.interfaceOrientation == UIDeviceOrientationLandscapeLeft) || (self.interfaceOrientation == UIDeviceOrientationLandscapeRight))
{
self.background=self.background_D;
self.backgroundImage.backgroundColor = [UIColor colorWithPatternImage:self.background];
}
else if((self.interfaceOrientation == UIDeviceOrientationPortrait) || (self.interfaceOrientation == UIDeviceOrientationPortraitUpsideDown))
{
self.background=self.background_P;
self.backgroundImage.backgroundColor = [UIColor colorWithPatternImage:self.background];
}
}
Все работает нормально, за исключением случаев, когда я меняю ориентацию, требуется пауза на секунду, а затем меняется изображение. Между тем он показывает то же самое старое изображение в формате плитки. Что я должен сделать, чтобы избежать этого?
Sumit
1 ответ
Например, вы можете использовать два представления с содержимым и реализовать willRotateToInterfaceOrientation:
и поместите анимацию туда, где вы затушевываете один вид, а другой - внутрь. Если вы правильно настроите синхронизацию, ваш переход должен быть плавным и только что завершенным, когда будет выполнен обмен ориентацией. Для анимации вы используете либо beginAnimations:
и связанные методы или на iOS 4 и выше [UIView animateWithDuration:delay:options:animations:completion:]
, http://www.raywenderlich.com/2454/how-to-use-uiview-animation-tutorial является началом анимации.
Еще лучшим способом было бы реализовать willAnimateRotationToInterfaceOrientation:duration:
который уже вызывается внутри блока анимации. Здесь вам нужно только перенастроить альфа-значения ваших блоков, а анимация сделает все остальное. Обратите внимание, что в качестве альтернативы вы могли бы даже реализовать willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:
где вы могли бы скрыть свое видимое изображение и willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:
где вы показываете другой.