2011-01-13 13 views
0

私は、iPhone上の写真アプリによく似たアプリを設定しようとしています。私が実行している問題は、最小のズームスケールを設定し、現在のズームスケールが現在の最小値よりも小さい場合は強制的に最小のスケールに戻す良い方法を見つけられないことです。ここでオリエンテーション変更の最小ズームスケールを変更するにはどうすればよいですか?

私は現在、私のscrollviewを設定しています方法です...

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

}

ようlayoutSubviewsだオーバーロードするサブクラス化され私が行っている影響は、画像が常に中央に配置され、画像の幅や高さ以上にズームアウトできないということです。

これは今ではポートレートモードでは問題ありませんが、風景に切り替えるとズームのスケールが正しくありません。

私はまだ新生iPhoneアプリの開発者ですので、助けていただければ幸いです。あなたのビューコントローラで

答えて

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]; 
    } 
} 
+0

これはトリックを行い、本当に自分自身を実現していたはずのものです。 –

+0

喜んで助けてください。 :) – Altealice

0

を実装します。私は[scrollview setZoomScale::animated]メソッドを試していました。方向変更では、必要な値にスケールされません。

結果として、未完了のアニメーションになります。

関連する問題