厳密な自動レイアウト環境を使用した UIScrollView でのズームは機能していないようです。
iOS 6 のリリース ノートでは、ここで「Pure Auto Layout アプローチ」について書いたとき、そうすべきだと確信するようになったので、これは特にイライラしますhttp://developer.apple.com/library/ios/#releasenotes/General/RN- iOSSDK-6_0/_index.html
WWDC 2012 のセッション 202、228、および 232 のスライドを見ましたが、これに対する回答はありませんでした。
この問題について特にインターネットで見た唯一の質問は、 Auto Layoutを使用した UIScrollView zooming ですが、問題のコードは提供されておらず、答えもありません。
このユーザーhttps://stackoverflow.com/users/341994/mattは UIScrollView autolayout の質問に多くの素晴らしい回答をしており、git ハブのコードにもリンクされていますが、この問題に答えるものを見つけることができませんでした。
明確にするために、この問題を最小限に抑えようとしました。
ストーリーボードを使用して新しいシングル ビュー アプリケーションを作成し、インターフェイス ビルダーを変更しませんでした。
プロジェクト「pic.jpg」に大きな画像ファイルを追加しました。
SVFViewController.h
#import <UIKit/UIKit.h>
@interface SVFViewController : UIViewController <UIScrollViewDelegate>
@property (nonatomic) UIImageView *imageViewPointer;
@end
SVFViewController.m
#import "SVFViewController.h"
@interface SVFViewController ()
@end
@implementation SVFViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIScrollView *scrollView = [[UIScrollView alloc] init];
UIImageView *imageView = [[UIImageView alloc] init];
[imageView setImage:[UIImage imageNamed:@"pic.jpg"]];
[self.view addSubview:scrollView];
[scrollView addSubview:imageView];
scrollView.translatesAutoresizingMaskIntoConstraints = NO;
imageView.translatesAutoresizingMaskIntoConstraints = NO;
self.imageViewPointer = imageView;
scrollView.maximumZoomScale = 2;
scrollView.minimumZoomScale = .5;
scrollView.delegate = self;
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);
NSLog(@"Current views dictionary: %@", viewsDictionary);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]];
}
-(UIView*)viewForZoomingInScrollView:(UIScrollView *)scrollView{
return self.imageViewPointer;
}
@end
iOS 6 リリース ノートで提供されているサンプル コードと同じように、ズームを実装するための最小限の処理を行っていることに注意してください。
それで、問題は?
このアプリケーションを実行してスクロール ビューをパンすると、すべてがうまくいきます。しかし、ズームすると問題は明らかで、画像が前後にちらつき、ズームするたびにスクロール ビュー内の画像の位置がさらにずれます。
imageView のコンテンツ オフセットをめぐって戦闘が行われているようです。「ズーム」ごとに 2 つの異なるものによって異なる値に設定されているようです。(これを確認するために、imageView のコンテンツ オフセット プロパティの NSLog が表示されます)。
ここで何が間違っていますか?純粋な自動レイアウト環境で UIScrollView 内でズームをプロパティ実装する方法を知っている人はいますか? この例はどこかにありますか?
助けてください。