これが機能しない理由は、2つの構文が混在しているためです。
まず、「。」があります。アクセサ関数(Objective-C機能)を呼び出すためのショートカットとして。それで
- abは[agetB]になります。
- ab =5は[asetB:5]になります。
そして、そこに「。」直接構造体メンバーアクセスとして(純粋なC)。それで
- abは本当にabです。
- abは実際にはab=5です。
このようにset-value-caseでこれを組み合わせると、機能しません。
なぜなら...あなたが電話できれば
myView.frame.origin.x = 25.0;
「myView.frame」の部分は[myViewgetFrame]と等しく、コピーされたCGRectフレーム(C構造体)を取得します。
「myView.frame.origin」は、コピーされたCGRectのCGPointオリジン(構造体でもあります)を提供します
"myView.frame.origin.x = 25.0"は、原点のCGFloat xを提供します。次に、それに何かを割り当てたいと思います。ここで問題が発生します...
構造体の構造体の変数を設定しようとしましたが、これは問題ありませんが、UIViewから構造体へのポインターがないため、代わりにコピーされます。したがって、コピーしてから設定すると、設定されたアクションがUIViewへの最初の取得を通じて何らかの形で転送されることが期待されますが、これは機能しません。
もちろん、なぜAppleがショートカットを作成しただけではないのか不思議に思うかもしれません。そのため、コピーしたフレームは自動的に自動追加されたsetFrame呼び出しに再注入されます。
したがって、フレームへのポインタを取得すれば機能することを覚えておいてください。ただし、そうではなく、代わりにコピーされた構造体を取得します。
したがって、動作することを期待myView.frame.origin.x = 25.0
している場合は、呼び出しが自動的にある種のに変換されることを間接的に期待します
[myView setFrame:[myView getFrame:frame].origin.x = 25.0]
。
まあ、これは間違っているように見えることを認めることができると思います。
また、CGRectフレームへの直接ポインターを取得し、そのポインターを介して何かを変更した場合、UIViewは、サイズが変更され、それ自体を更新する必要があることをどのように認識しますか?一方、[myView setFrame:newFrame]呼び出しが行われた場合、UIViewは必要なすべての再調整を実行できます。