0

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は、そのlayoutSubviewsをオーバーロードするためにサブクラス化されています...

- (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;

}

私が目指している影響は、画像が常に中央に配置され、画像の幅または高さを超えてズームアウトできないことです。

現在、これはポートレートモードでは正常に機能しますが、ランドスケープに切り替えると、ズームスケールが正しくなくなります。

私はまだ駆け出しのiPhoneアプリ開発者なので、助けていただければ幸いです。

4

2 に答える 2

1

ビューコントローラーで、実装します-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];
  }
}
于 2011-01-14T02:55:12.583 に答える
0

また、情報のためだけに別のポイント。[scrollview setZoomScale: :animated] メソッドを試していました。向きを変更すると、必要な値にスケールされません。

未完成のアニメーションになります。

于 2014-02-21T11:10:10.887 に答える