изменить фоновое изображение в ячейке, когда iPhone вращается - PullRequest
0 голосов
/ 29 августа 2011

В моем табличном представлении есть 4 ячейки, и в каждой ячейке есть одно изображение в качестве фона.

Когда я поворачиваю iPhone, высота строк изменяется, а также изображения.

Действительно легко изменить изображение, если оно находится в альбомной или портретной ориентации, но изображение меняется, когда iPhone уже повернут, а не вращается! В чем проблема? Например: iPhone в портретной ориентации, а пользователь поворачивает его в альбомной ориентации. Это очень уродливый эффект, потому что картинки меняются только тогда, когда iPhone находится в альбомной ориентации, и на долю секунды пользователь видит портретное изображение деформированным (до этого оно меняется).

Как мне это решить?

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 августа 2011

Простой способ:
Реализация willAnimateRotationToInterfaceOrientation в вашем контроллере вида.Внутри этого метода вы можете переориентировать ваши фотографии, и они будут автоматически анимированы.Краткий обзор этого и других доступных методов ориентации интерфейса приведен в http://www.dizzey.com/development/ios/handling-layout-on-uiinterfaceorientation-change/

Бессмысленно сложный способ:
Вы можете вручную отслеживать ускорение и писать собственные анимационные блоки.Установите свой контроллер представления как UIAccelerometerDelegate.Обратитесь к sharedAccelerometer следующим образом.

    accel = [UIAccelerometer sharedAccelerometer];
    accel.delegate = self;
    accel.updateInterval = 1.0f/60.0f;

Затем реализуйте этот метод делегата.Это будет выполняться каждый раз, когда акселерометр замечает ускорение.Отслеживание ускорения по оси X даст вам альбомную / книжную ориентацию.

#pragma mark UIAccelerometer delegate method
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    if(acceleration.x > 0.8) //landscape right
    {
        [UIView beginAnimations:@"text spin" context:nil];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        [UIView setAnimationDuration:0.2];
        //do some animation to landscape right
        [UIView commitAnimations];
    }
    if(acceleration.x < -0.8) //landscape left
    {
        [UIView beginAnimations:@"text spin" context:nil];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        [UIView setAnimationDuration:0.2];      
        //do some animation to landscape left
        [UIView commitAnimations];
    }
    if(acceleration.x < 0.2 && acceleration.x > -0.2) //portrait 
    {
        [UIView beginAnimations:@"text spin" context:nil];
        [UIView setAnimationCurve:UIViewAnimationCurveLinear];
        [UIView setAnimationDuration:0.2];
        //do some animation to portrait view
        [UIView commitAnimations];
    }
0 голосов
/ 29 августа 2011

В такой ситуации во время вращения я обычно использую свойство .hidden для элементов (myObject.hidden = YES), а затем восстанавливаю их после завершения вращения.

Я полагаю, что у ваших рамок для фотографий больше места в альбомной ориентации - еще одно предложение, если это правда, - сохранять их одинакового размера в обеих ориентациях, тогда вам не нужно будет, например, прятать их во время поворота.

Надеюсь, это поможет!

...