0

Xcode 4.5 にアップグレードし、iOS SDK 6.0 の使用を開始しました。ここに画像の説明を入力

Xcode 4.4 と iOS SDK 5.1 で開発されたユニバーサル アプリがあります。

ここに画像の説明を入力

テストしたすべてのデバイスとシミュレーターで問題なく動作していました。

iPhone 5 でも引き続き動作することを期待して、適切な起動イメージを提供して実行したいと考えました。

アプリの多くの部分は変更なしで機能しますが、一部は機能しません。UIScrollView に配置した画像がパンしません。これは以前は常に機能していましたが、iOS 6 シミュレーターでは機能しませんでした。

ただし、問題の真の核心: iOS 5.0 または iOS 5.1 シミュレーターで実行しようとすると、デバッグ ログに次のようにスローされる例外が表示されます。

-[NSKeyValueMethodSetter setMaximumNumberOfTouches:]: unrecognized selector sent to instance 0x6ddab20

スタック クロールは、この呼び出しを行おうとしているコードが であることを示していますUIScrollView setMinimumZoomScale

setMimimumZoomScale を呼び出すコードは次のとおりです。

    CGFloat widthScale = self.scrollView.bounds.size.width / self.image.size.width;
    CGFloat heightScale = self.scrollView.bounds.size.height / self.image.size.height;

    // just reset the zoom scales; leave center and everything else where possible
    self.scrollView.minimumZoomScale = MIN(1.0, MIN(widthScale, heightScale));
    self.scrollView.maximumZoomScale = 4.0;

スローされた例外 (およびその後のクラッシュ) は、setMimimumZoomScale への最初の呼び出しで発生し、上記のメッセージが表示されます。

Xcode 4.5 は setMinimumZoomScale を呼び出すコードを使用していると推測していますが、これはおそらく iOS 6 のライブラリに存在しますが、iOS 5 には存在しませんでした。

他の人も同様の問題を見ていますか?

fwiw、私は自分の .storyboard ファイルに触れていないので、autoLayout なしで動作するように設定されています。

作業中のアプリを引き続き維持できるようにするために、Xcode 4.5 の横に Xcode 4.4 をインストールする必要がありますか?

4

1 に答える 1

2

自分の質問に答える…</p>

私の最初の質問の複雑さには、追加のジェスチャ認識機能が含まれていました。

iOS 5.1 SDK (およびそれ以前) では、ジェスチャー認識機能を UIScrollView に追加して、UIScrollView に組み込まれている panGestureRecognizer および pinchGestureRecognizer と連携させることができました。

iOS 6.0 SDK では、この動作は明らかにサポートされていません。関連するドキュメントは、パンとピンチに関連するかどうかに関係なく、UIScrollView がタッチに対して何をするかを定義しているため、動作を明示的に禁止していません。

スクロール ビューにはスクロール バーがないため、タッチがコンテンツ内のサブビューを追跡する意図とスクロールする意図を示すかどうかを知る必要があります。この判断を行うために、タイマーを開始してタッチダウン イベントを一時的にインターセプトし、タイマーが起動する前に、タッチしている指が何らかの動きをするかどうかを確認します。位置を大きく変更せずにタイマーが起動した場合、スクロール ビューは追跡イベントをコンテンツ ビューのタッチされたサブビューに送信します。ユーザーがタイマーが経過する前に指を十分にドラッグすると、スクロール ビューはサブビューでの追跡をキャンセルし、スクロール自体を実行します。サブクラスは touchesShouldBegin:withEvent:inContentView:、pagingEnabled、および touchesShouldCancelInContentView: メソッド (スクロール ビューによって呼び出される) をオーバーライドして、スクロール ビューがスクロール ジェスチャを処理する方法に影響を与えることができます。

問題を修正するために、ストーリーボードのジェスチャ認識エンジンがスクロールビューに関連付けられたコレクションの一部ではなくなったことを確認し、代わりにそれらをスクロールビューのコンテンツ ビューに関連付ける必要がありました。

(私の場合、これを行うには、addGestureRecognizer:興味のあるジェスチャ認識機能ごとに手動で追加する必要がありました。これは、コンテンツ ビューがストーリーボードの時点では不明な画像用であるためです。)

于 2012-10-02T00:54:00.420 に答える