2010-11-21 11 views
0

私はこれを取得していません。ユーザがボタンをクリックしたときにアプリケーションにビューを表示したいと思います。Objective-Cはプログラムでビューを表示する方法を説明することができます

私はこれまでのところ得ている:

NSView* unitMarker = [[NSView alloc] initWithFrame: NSMakeRect(20.0, 20.0, 80.0, 50.0) ]; 

がどのように私は赤の背景と、このビューが表示されますか?

おかげ

+4

本を購入し、基本を学びます。このルートはどこにもありません。 –

答えて

0

をするのに役立ちます。

この場合、赤い線で全体を塗りつぶすだけです。

何をしたいん非常に基本的な例ですが、あなたは、より複雑なもの(ボーダー(ストローク)または描画曲線を追加(パス)など)を行いたい場合は、あなたがすべての描画を学ぶ必要が
@interface MyView : NSView { 
} 
@end 


@implementation MyView 

-(void)drawRect:(NSRect)dirtyRect { 
    [[NSColor redColor] set]; 
    NSRectFill(dirtyRect); 
} 

@end 

あなたに利用可能なクラス。

http://cocoadevcentral.com/d/intro_to_quartz/と;:

スコット・スティーブンソンは、この上のチュートリアルに従うことを、いくつかは、簡単に書かれています http://cocoadevcentral.com/d/intro_to_quartz_two/

1

@Aaron:彼はプログラムでこれをやりたいと言います。また彼はUIViewではなくNSViewを使用しているので、iPhoneのチュートリアルはほとんど無関係です。

@Mike:あなたがしたいことのあなたの説明は少し曖昧です。ビューを作成するコードが少しありますが、何をしようとしているのかを正確に伝えるためのコンテキストはありません。新しいウィンドウや同じウィンドウでビューを表示したいですか?あなたは既にそこにあるビューを置き換えたいですか?あなたのスキルレベルは本当にわかりません。

私はあなたがNSViewのためにドキュメントをチェックアウトして行くお勧め:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html

+0

今後の参考のために、このような回答はコメントでなければなりません;答えはありません;)(私が意味するのはリンクではなく他のユーザーにコメントしてください) – d11wtq

+0

私はここで初心者です。 –

1

繰り返し大声で10回これを言う:

Interface Builderは私の友人です。

私は、プロセスの一部としてInterface Builderを活用して、約5分で何をしたいのか正確にサンプルプロジェクトをまとめることができました。 http://www.markdouma.com/developer/ShowWindowWithRedView.zip

ビューを最初にウィンドウに配置することなく表示することはできません。この種のことを行う最も簡単な方法は、Interface Builderの2番目のウィンドウをドラッグして起動時に表示しないように設定し、一般的なNSViewカスタムビューをウィンドウにドラッグし、そのクラスをSRRedViewに設定します赤いビューのサブクラス)。 d11wtqが投稿されると、NSViewのプリミティブ描画メソッドをオーバーライドします(個人的にはNSBezierPath:-Pが好きですが)。

コントローラクラスでは、IBOutletsを定義し、Interface Builderでそれらをフックします。これらは、インターフェイスの重要な部分を参照する方法を提供し、プログラマチックに操作することができます。

IBActionメソッドを1つ追加しました。メインウィンドウのボタンが呼び出されるように接続されています。その方法は、単に第2のウィンドウに自身を表示するように指示する。

- (IBAction)showWindowWithRedView:(id)sender { 
    [windowWithRedView makeKeyAndOrderFront:nil]; 
} 

私がココアプログラミングをしてきた8年以上のことで、私は手動でウィンドウとビューを作成する必要があるとは思わなかった。表示する必要のあるウィンドウやビューを含む別のnibファイルを単に読み込む方がはるかに高速でした。 Interface BuilderとXcodeを使ってアプリケーションを作成することは、他のIDEの仕組みとは少し異なります。 (具体的には、Interface Builderで要素を整理すると、UIオブジェクトのインスタンスを作成するのと同じくらいコードを生成せずに、現在の配置で.nibアーカイブファイルに「フリーズドライ」します。彼らは人生に戻ってくるか、少なくともそれは私がそれについて考える方法です)。

+2

「NSRectFill」とNSBezierPathの主題について:NSBezierPathはより柔軟ですが、矩形を塗りつぶしたい場合はさらにタイピングしてください。 'NSRectFill'はデフォルトで' NSCompositeCopy'を使うので、デフォルトでは大幅に高速ですが、NSBezierPathはデフォルトで 'NSCompositeSourceOver'というコンテキストの合成操作を使います。いずれか一方を同じように高速に変更することは可能ですが、それはさらにタイピングです。一方、時にはあなたは本当に 'SourceOver'を必要とします。 –

1

私はこれまでのところ得ている:

NSView* unitMarker = [[NSView alloc] initWithFrame: NSMakeRect(20.0, 20.0, 80.0, 50.0) ]; 

どのように私は赤い背景でこのビューを表示するのでしょうか?

普通のNSViewは何も描画しないので、あなたはそうしません。

まずNSViewをサブクラス化し、drawRect:をそのサブクラスに実装して、その境界線を赤で塗りつぶし、NSViewではなくそのサブクラスを直接インスタンス化する必要があります。

View Programming Guideをお読みください。私は、このビューを表示する方法を

...

あなたはないでしょう。ビューは、それが適切なときに表示されます。

add it to a view hierarchyまでそれを描くのはこれほど適切ではありません。すべてのウィンドウにはコンテンツビューがあります。このビューは、コンテンツビュー、またはコンテンツビューの子孫ビュー(サブビュー、サブビューのサブビューなど)のいずれかに追加する必要があります。

通常、コントローラから表示するように指示するべきではありません。それが窓の仕事です。描画する内容に影響を与えるビューのプロパティまたはプロパティを変更するときは、set the view as needing displayを入力し、ウィンドウが適切に表示されるようにウィンドウに表示させます。

+1

アクティブ対パッシブパラダイムについての優れた点。私は忘れていました。ココアにとって新しい人たちがやっていることは、アプローチをあまりにも積極的に取り入れることです。 「どのように私はこのビューを表示するのですか」、「テーブルビューに4つの行を入れるにはどうすればいいですか」などです。 – NSGod

関連する問題