Поворот полноэкранного UIImageView - PullRequest
0 голосов
/ 19 декабря 2011

У меня есть два изображения:

Help-Portrait.png (320 x 480)Help-Landscape.png (480 х 320)

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

По какой-то причине у меня возникли проблемы с этим.Кто-нибудь может пролить свет на то, что я делаю неправильно?

UIImage *image = nil;
CGRect frame;
if (UIInterfaceOrientationIsPortrait([[UIApplication sharedApplication] statusBarOrientation])) {
    image = [UIImage imageNamed:@"Help-Portrait.png"];
    frame = CGRectMake(0, 0, 320, 480);
} else {
    image = [UIImage imageNamed:@"Help-Landscape.png"];
    frame = CGRectMake(0, 0, 480, 320);
}
if (!helpImageView) {
    helpImageView = [[UIImageView alloc] initWithFrame:frame];
    helpImageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    helpImageView.image = image;
}
[[UIApplication sharedApplication] setStatusBarHidden:YES];

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(helpImageTapped:)];
helpImageView.userInteractionEnabled = YES;
[helpImageView addGestureRecognizer:tap];
[self.view addSubview:helpImageView];
[tap release];

willRotateToInterfaceOrientation:

if(helpImageView) {
    [(id)[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
    if (UIInterfaceOrientationIsPortrait(toInterfaceOrientation)) {
        helpImageView.image = [UIImage imageNamed:@"Help-Portrait.png"];
    } else {
        helpImageView.image = [UIImage imageNamed:@"Help-Landscape.png"];
    }
}

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

Мне нужно, чтобы оно показывало правильное изображение для ориентации в правильном направлении вверх.Также я хотел бы анимацию для поворота изображения, но это побочный вопрос

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

В ответе Михаэля Даутермана, похоже, есть почти все ответы, но я против использования shouldAutorotateToInterfaceOrientation. Этот метод предназначен только для определения того, должно ли происходить вращение, и ничего больше.

Вы должны использовать вместо didRotateFromInterfaceOrientation: willAnimateRotationToInterfaceOrientation:duration.

didRotateFromInterfaceOrientation: - interfaceOrientation уже настроен на UIViewController, поэтому вы можете получить текущую ориентацию. В этом случае анимация вращения уже завершена.

willAnimateRotationToInterfaceOrientation:duration - Преимущество этого метода - время выполнения. Вы находитесь внутри анимации вращения, поэтому у вас не будет особых эффектов, которые происходят, когда вы меняете интерфейс либо после завершения анимации вращения.

0 голосов
/ 20 декабря 2011

Получил работу, с этим кодом:

- (void)showHelpImage {

    NSString *imageName = @"Help_Portrait.png";
    CGRect imageFrame = CGRectMake(0, 0, 320, 480);

    helpImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]];
    helpImageView.frame = imageFrame;
    [self.view addSubview:helpImageView];
    [self updateHelpImageForOrientation:self.interfaceOrientation];

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(helpImageTapped:)];
    helpImageView.userInteractionEnabled = YES;
    [helpImageView addGestureRecognizer:tap];
    [self.view addSubview:helpImageView];
    [tap release];
}

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    [self updateHelpImageForOrientation:toInterfaceOrientation];
}

- (void)updateHelpImageForOrientation:(UIInterfaceOrientation)orientation {
    NSString *imageName = nil;
    CGRect imageFrame = helpImageView.frame;
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
        imageName = @"Help_Portrait.png";
        imageFrame = CGRectMake( 0, 0, 320, 480);
    } else if (orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight) {
        imageName = @"Help_Landscape.png";
        imageFrame = CGRectMake( 0, 0, 480, 320);
    }
    helpImageView.image = [UIImage imageNamed:imageName];
    helpImageView.frame = imageFrame;
}

Получил идею от: http://www.dobervich.com/2010/10/22/fade-out-default-ipad-app-image-with-proper-orientation/

0 голосов
/ 19 декабря 2011

Место, где вам нужно настроить изображение кнопки, находится в методе ViewController shouldAutorotateToInterfaceOrientation (документация связана с вами).

Сделайте что-то вроде:

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
    UIImage *image = NULL;

    if (UIInterfaceOrientationIsPortrait(interfaceOrientation))
    {
        image = [UIImage imageNamed:@"Help-Portrait.png"];
    } else {
        image = [UIImage imageNamed:@"Help-Landscape.png"];
    }
    [yourButton setImage: image forState: UIControlStateNormal]
    return YES;
}
...