0

画像を表示するためにスクロールビューに単純な ImageView を実装しようとしています。特にピンチツーズーム機能を実装したいです。次のコードを実装しました (これは、Apple の Web サイトにある Objective C のサンプル コードの 1 つから取得したものです)。iOS 5 でズームを徹底的にテストしましたが、問題はないようです。しかし、コードを iOS 6 に移植してズーム機能をテストすると、しばらくすると次のエラー メッセージが表示され、ズーム結果が歪んでアプリがクラッシュします。

制約を同時に満たすことができません。おそらく、次のリストの制約の少なくとも 1 つが望ましくないものです。これを試してみてください: (1) 各制約を見て、どれが予期しないものかを把握してみてください。(2) 不要な制約を追加したコードを見つけて修正します。(注: 理解できない NSAutoresizingMaskLayoutConstraints が表示されている場合は、UIView プロパティ translatesAutoresizingMaskIntoConstraints のドキュメントを参照してください)

NSAutoresizingMaskLayoutConstraint:0x8808360 h=--- v=--- V:[UIWindow:0x744db00(480)]、NSLayoutConstraint:0x71286d0 UIView:0x71222c0.bottom == UIWindow:0x744db00.bottom、NSLayoutConstraint:0x7128650 V:|-(20) -[UIView:0x71222c0] (名前: '|':UIWindow:0x744db00)、NSLayoutConstraint:0x7120c50 UIImageView:0x7451630.bottom == UIScrollView:0x71206f0.bottom、NSLayoutConstraint:0x7120c90 V:|-(0)-[UIImageView:0x745163] (名前: '|':UIScrollView:0x71206f0)、NSLayoutConstraint:0x7120bd0 UIImageView:0x7451630.centerY == UIScrollView:0x71206f0.centerY、NSLayoutConstraint:0x7122a50 V:|-(10)-[UIScrollView:0x71206f0] (名前: '|' :UIView:0x71222c0 )、NSLayoutConstraint:0x7122940 V:[UIScrollView:0x71206f0]-(38)-| (名前: '|':UIView:0x71222c0 )

制約を破って回復を試みます

objc_exception_throw で中断して、デバッガーでこれをキャッチします。にリストされている UIView の UIConstraintBasedLayoutDebugging カテゴリのメソッドも役立つ場合があります。

この問題についてグーグル検索を試みましたが、良い結果が得られません。私が使用しているコードは次のとおりです。ヘルプは大歓迎です

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // set the tag for the image view
    [self.imageView setTag:ZOOM_VIEW_TAG];

    // calculate minimum scale to perfectly fit image width, and begin at that scale
    NSLog(@"[imageScrollView frame].size.width : %f",[self.scrollVIew frame].size.width);
    NSLog(@"[imageView frame].size.width : %f",[self.imageView frame].size.width);

    NSLog(@"[imageScrollView frame].size.height : %f",[self.scrollVIew frame].size.height);
    NSLog(@"[imageView frame].size.height : %f",[self.imageView frame].size.height);

    float minimumScale = [self.scrollVIew frame].size.width  / [self.imageView frame].size.width;
    minimumScale = 300.0/1200.0;

    NSLog(@"minimumScale : %f",minimumScale);

    [self.scrollVIew setMinimumZoomScale:minimumScale];
    [self.scrollVIew setZoomScale:minimumScale];

    NSLog(@"imageScrollView.zoomScale : %f",self.scrollVIew.zoomScale);
    NSLog(@"imageScrollView.minimumZoomScale = minimumScale : %f",self.scrollVIew.minimumZoomScale = minimumScale);

    self.scrollVIew.contentSize = CGSizeMake(1200.0, 800.0);
    self.scrollVIew.delegate = self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
    return [self.scrollVIew viewWithTag:ZOOM_VIEW_TAG];
}

ヴィベク

4

2 に答える 2

1

UIImageViewプログラムで作成し、のサブビューを追加する必要がありますUIScrollView。ただし、これは viewDidAppear 内で作成する必要があります。

UIScrollView だけを StoryBoard で作成できます。

また、viewDidLoad の内部ではなくscrollView.contentSize、" " の内部を設定します。viewDidAppear:(BOOL)animated

于 2013-02-05T04:13:22.703 に答える
0

XIB ファイルで自動レイアウトを無効にします。右側のプロパティ セクションの一番左のタブの下にあります。知らず知らずのうちに使っていることでしょう。意図的に使用している場合は、互いに競合しないように制約を整理してください。

于 2012-10-15T14:24:20.330 に答える