回転できるアプリがあるので、縦向きと横向きに対処する必要があります。さらに、ユーザーはピンチ ジェスチャを使用してビューのスケールを変更できます。ビューの基本的な階層は次のとおりです。
mainView は self.view のサブビューです (メイン ビュー コントローラーのコンテキストから)。画像部分は比較的重要ではありませんが、UIImageView です。いずれにせよ、これは、この説明の残りのビューがサブビューとして配置されるビューです。
1 つ目は、私がボードと呼んでいるものです。ユーザーがアイテムを組み立てるビューです。これらのアイテム自体がイメージ ビューです。
さらに、私がパレットと呼んでいるものがあります。これらは、ユーザーがサイズ変更およびスケーリングできる単純なビューです。さらに、前述の画像ビューは、あるパレットから別のパレットまたはボードにドラッグできます。パレットは、ユーザーの作業スペースと考えることができます。作業が終了したら、アセンブリをボードに配置します。
これまでのところ、ボードが自動レイアウトの一部であるアプリを使用してきましたが、パレットは必要に応じてプログラムで作成されます。ユーザーがデバイスを回転させると、オートレイアウトが自動的にボードを適切に配置するため、これは良いことです。少なくとも、ピンチ スケーリングを追加するまではそうでした。
Autolayout には、インターフェイス ビルダーで次の制約が設定されています。
ユーザーがビューをスケーリングすると、その結果、画面の左上隅に固定されます。中心を維持した方がいいと思います。
このビューのピンチ ジェスチャ認識エンジンに次のコードを追加して、プログラムでこれを変更しようとしました。
if (self.pinchView.tag == TAGBOARD) {
[NSLayoutConstraint constraintWithItem:self.pinchView
attribute:NSLayoutAttributeCenterX
relatedBy:NSLayoutRelationEqual
toItem:self.mainView
attribute:NSLayoutAttributeCenterX
multiplier:1.0
constant:0];
}
しかし、これは何もしないようでした。IBの制約と競合するためだと思います。自動レイアウトでこれを機能させるために他にできることはありますか? それとも、他のビューと同じように、すべてプログラムで行う必要がありますか?
このコード例では、self.pinchView はピンチ ジェスチャが適用されるビューです。この議論のために、私はこれを取締役会と呼んでいます。self.mainView ビューはそのスーパービューです。