Как изменить минимальный масштаб при изменении ориентации? - PullRequest
0 голосов
/ 13 января 2011

Я пытаюсь настроить приложение, очень похожее на приложение «Фотографии» на iPhone.Проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти хороший способ установить минимальный масштаб масштабирования и заставить текущий масштаб масштабирования вернуться к минимуму, если он в настоящее время меньше минимального.

Вот как яв настоящее время я настраиваю прокрутку ...

- (void)viewDidLoad{

NSData * imageData = [[[NSData alloc] autorelease] initWithContentsOfURL: [NSURL URLWithString: imageURL]];
UIImage *babe = [UIImage imageWithData:imageData];
babeView = [[UIImageView alloc]
            initWithImage:babe];
[self.view addSubview:babeView];
UIBabeScrollView* myScrollview = (UIBabeScrollView*)self.view;
myScrollview.frame = [UIScreen mainScreen].applicationFrame;
[myScrollview setContentSize:[babe size]];
[myScrollview setMaximumZoomScale:2.0];
// Work out a nice minimum zoom for the image - if it's smaller than the ScrollView then 1.0x zoom otherwise a scaled down zoom so it fits in the ScrollView entirely when zoomed out
CGSize imageSize = babeView.image.size;
CGSize scrollSize = myScrollview.frame.size;
CGFloat widthRatio = scrollSize.width / imageSize.width;
CGFloat heightRatio = scrollSize.height / imageSize.height;
CGFloat minimumZoom = MIN(1.0, (widthRatio > heightRatio) ? heightRatio : widthRatio);

[myScrollview setMinimumZoomScale:minimumZoom];
[myScrollview setZoomScale:minimumZoom];

Мой UIBabeScrollView разделен на подклассы для перегрузки макета. Подвиды выглядят так ...

- (void)layoutSubviews {
[super layoutSubviews];

// center the image as it becomes smaller than the size of the screen
CGSize boundsSize = self.bounds.size;
CGRect frameToCenter = ((UIImageView*)[self.subviews objectAtIndex:0]).frame;

// center horizontally
if (frameToCenter.size.width < boundsSize.width)
    frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width) / 2;
else
    frameToCenter.origin.x = 0;

// center vertically
if (frameToCenter.size.height < boundsSize.height)
    frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height) / 2;
else
    frameToCenter.origin.y = 0;

((UIImageView*)[self.subviews objectAtIndex:0]).frame = frameToCenter;

}

Аффект IЯ хочу сказать, что изображение всегда центрировано и не может быть уменьшено больше, чем ширина или высота изображения.

Сейчас это прекрасно работает в портретном режиме, но когда он переключен в альбомную ориентацию,масштабирование некорректно.

Буду признателен за любую помощь, так как я все еще начинающий разработчик приложений для iphone.

Ответы [ 2 ]

1 голос
/ 14 января 2011

В вашем контроллере представления реализуйте -willRotateToInterfaceOrientation:duration:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
  if (toInterfaceOrientation == UIDeviceOrientationLandscapeLeft ||
      toInterfaceOrientation == UIDeviceOrientationLandscapeRight) {    
    [myScrollview setMinimumZoomScale:yourLandscapeMinimumZoomValue];
    [myScrollview setZoomScale:yourLandscapeMinimumZoomValue];
  } else {
    [myScrollview setMinimumZoomScale:yourPortraitMinimumZoomValue];
    [myScrollview setZoomScale:yourPortraitMinimumZoomValue];
  }
}
0 голосов
/ 21 февраля 2014

Также еще один момент, просто для информации.Я пробовал метод [scrollview setZoomScale:: animated].При изменении ориентации он не масштабируется до требуемого значения.

Это приводит к незавершенной анимации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...