私は、以前よりも少し複雑なインターフェイス要素の動的レイアウトを含むプロジェクトに取り組んでいます。私はいつも、そのようなものに近いかどうかをチェックし、その場合はそれをある方向にx%移動するなど、複雑なコードを書くのは愚かだと感じます。それはプログラミングのやり方ではありません。プログラミングは可能な限り宣言型でなければなりません!
私がやろうとしていることはかなり単純なので、何か新しいことを試す良い機会になると思い、単純な制約ソルバーNSPredicate
として使用することを考えました。私はこれまで非常に単純なタスクにしか使用していませんが、それがはるかに多くの機能を備えていることを知っています。 NSPredicate
ここで役立つ可能性のあるアイデア、経験、例、警告、洞察はありますか?
非常に簡単な例を挙げますので、具体的な答えがあります。NSPredicate
次の制約を解決するにはどうすればよいですか。
viewB.xmid = (viewB.leftEdge + viewB.width) / 2
viewB.xmid = max(300, viewA.rightEdge + 20 + viewB.width/2)
(「viewBの左端がviewBの右端から20ピクセル以内に収まらない限り、viewBは座標300の水平方向の中心に配置する必要があります。この場合、viewAの左端はviewBの右端の右20ピクセルに固定され、viewAの水平方向の中心は権利。")
viewA.rightEdge
変化する可能性がありviewB.width
、それらは「入力変数」です。
編集:どのソリューションでも、おそらくNSExpression
メソッドを使用する必要があり-(id)expressionValueWithObject:(id)object context:(NSMutableDictionary *)context
ます。
この答えは適切です。