[myView setNeedsDisplay] を呼び出すたびに、ランダムな色で画面に新しいランダムな円を描画するように、UIView の drawRect メソッドをオーバーライドするにはどうすればよいですか。古いサークルに取って代わるべきではありません。したがって、画面全体に円が次々と積み重なっていくように見えるはずです。
1 に答える
このままでは使えませんdrawRect:
。その矩形内にビュー全体を描画するように設計されているため、追加するボールだけでなく、すべてのボールを一度に描画する必要があります。drawRect が呼び出されるたびに、描画している画面の領域は、以前の状態から消去されています。
最初に考えたのは、ランダムなサイズと位置で、個々のボールごとにビューを作成することでした。しかし、SonOfSillyBalls のサンプル コード (まさにあなたがしようとしていることを実行します) は、別のアプローチをとっています。
そのNSView
サブクラスは、繰り返しタイマーを設定してdrawAnother:
メソッドを起動します。メソッドは を実行し[self lockFocus]
、次にランダムなボールを描画し、[self unlockFocus]
描画を終了します。最後に[self.window flushWindow]
、新しいボールを画面に表示するために呼び出します。
それはあなたがやろうとしていることを正確に実行するので、おそらくそれを読むべきではありません (その難点はどこにあります!) が、SonOfSillyBalls のサンプル コードはここにあります: http://developer.apple.com/library/mac /#samplecode/SonOfSillyBalls/
全体的な問題の説明と、最新の描画 API に最適ではない理由については、read me を参照してください (注: 古い API であるため、Mac OS X を「Open Step」および「Rhapsody " ("X" という名前はまだ発明されていませんでした) と "Mac OS" と同じように Classic Mac OS)
Silly Balls は Apple の最も古いサンプル コードの 1 つで、もともとは 1980 年代にさかのぼりますが、これは 3 回目の (と思う?) リビジョンで、わずか 6 か月前に Objective-C 2.0 を使用するように更新されました。