自分が何をしているのか本当にわかっていない限り (つまり、本当にわかっているという意味です)、自分で -initWithCoder: を呼び出さないでください。実装してシステムに呼び出させるのと同じように実装することを意図しています。このようなものを直接呼び出して、他に方法がない深い技術的な理由を説明できない場合は、それは間違ったアプローチです。ドキュメント (メソッドのドキュメントだけでなく) を読んで従い、使用しているメソッドを確実に理解してください。教えてくれます。-drawRect:
そうは言っても、ビューが「表示される」ときはいつでも「何かを行う」(BOOL をチェックし、YES/NO の場合は何らかの作業を実行する) ことができるビューのライフサイクルのポイントがあるかどうか疑問に思っていることです。答えはイエス-willMoveToSuperview
です。
しかし
それは「間違った」アプローチです、IMO。BOOL プロパティ (「次に描画を求められたときにひねりを描画する」) は UIView に存在する可能性があり、おそらく存在する必要がありますが、これはapp に固有であるため、その状態はコントローラーに設定する必要があります。ビューは (高度に) 再利用できるはずです。コントローラーは、アプリの特定のロジックを実装し、モデルの状態とユーザー (またはシステム) のアクションに従ってビューを駆動することになっています。
したがって、「ひねりを描く」操作を有効にする場合は、ビュー コントローラーでビュー インスタンスのdrawTwiddle
フラグを設定してから、おそらくビューに描画用のフラグを設定する必要があります。その後、ビューには-drawRect : が呼び出され、制御しようとしてはならない時点で呼び出されます。制御しようとすると、それを認識して、self.drawTwiddle == YES
他の描画と一緒にひねりを描画します。
その時点で、ビヘイビアーは 1 回起動することを意図しているため、ビューに独自のdrawTwiddle
フラグを設定させたくなるかもしれません。NO
これをしないでください。注意: 他のユーザー アクションまたはシステム イベントが-drawRect:
いつでも呼び出される可能性があるため、実際にはユーザーに回転が表示されない場合があります (表示されるよりも速く表示および非表示になる可能性があります)。「だから」、正しいことは、フラグの設定とdrawTwiddle
設定解除を担当するコントローラーを(何らかの直接アクション、システムイベント、またはタイマーを介して)作成し、次に再表示のためにビューにフラグを立てることです。
追加する
IBOutlet または IBAction を UIView に配置することも珍しいことです。ほとんどの場合、部分が個別にアクセスおよび管理されることを意図していない複合コントロールを作成している場合を除き、コントローラーが管理/所有できるようにすることで、アーキテクチャはより明確になります (MVC デザイン パターンの精神により厳密に従います)。アウトレットとアクション。