09/05/22 11:39:17 AsAPLcDl0
iPhone, iPod touch用アプリケーションの開発を始めたばかりの初心者向け質問スレです。
[お願い]
1. 質問は日本語でもしくはObjective-Cで
2. どういう内容であれレスをもらったらお礼の言葉を忘れずに。
回答者は自分の時間を使って親切で回答してくれています。
3. 回答者は自分も初心者であった事を忘れずに。
4. マルチポスト(複数のスレに同じ質問を書込むこと)は厳禁!
4. 質問は可能な限り具体的に。ただ「エラーが出ます」では
エスパーかスタンド使いでなければ答えられません。エラー内容をちゃんと書きましょう。
5. わからない部分のコードをコピペすると手っ取り早いです。
6. このスレは無料プログラミング教室ではありません。
「○○の仕方を教えてください」という質問はなるべく避けてください。
「自分で調べたけどわからなかった事」を質問するというスタンスを忘れずに。
関連スレ等は>>2以降
2:名称未設定
09/05/22 11:42:22 8yZn9dHL0
はい!誰も使わないようなゴミアプリ量産して楽しいですか!?
3:名称未設定
09/05/22 11:45:33 AsAPLcDl0
>>2
楽しいですよ~
金儲けだけが目的ではないです
関連スレ
本スレ
iPod touch/iPhone ネイティブアプリ製作 ver.11
スレリンク(mac板)
iTunes Connectの契約関係
iPhone Developer Program Pending Contract 2日目
スレリンク(mac板)
Xcodeの使い方メイン
Xcode part7
スレリンク(mac板)
Mac用開発がメイン
Cocoaはさっぱり!!! version.13
スレリンク(mac板)
Carbonはさっぱり!!!
スレリンク(mac板)
その他いろいろ
Macでプログラミング{9}
スレリンク(mac板)
4:名称未設定
09/05/22 11:50:26 oCAGvsww0
なんでム板やiPhone板に立てないの?
5:名称未設定
09/05/22 11:52:53 AsAPLcDl0
なにはともあれ公式のレファレンス
URLリンク(developer.apple.com)
日本語訳されたドキュメント
URLリンク(developer.apple.com)
関連図書(iPod touch/iPhone ネイティブアプリ製作 ver.11より)
【Cocoa全般、Objective-C】
Mac OS X Cocoaプログラミング(ピアソンエデュケーション 、2002/06)アーロン・ヒレガス著、 村上雅章訳
HappyMacintoshDevelopinTime 2nd Edition(ビー・エヌ・エヌ新社、2004/6)木下誠
HappyMacintoshDevlopingTime 3rd Edition(ビー・エヌ・エヌ新社、2006/5)木下誠
詳解 Objective-C 2.0(ソフトバンククリエイティブ 、2008/5)荻原 剛志
たのしいCocoaプログラミング(ビー・エヌ・エヌ新社 、2008/8) 木下誠
Xcodeプログラミング大全(アスキー・メディアワークス、2009/1/6) 柴田 文彦
【iPhone、和書】
iPhone SDKプログラミング大全(アスキー・メディアワークス、2009/1)木下誠
iPhone デベロッパーズ クックブック(ソフトバンククリエイティブ 、2009/2)エリカ・サドゥン著、(株)クイープ訳
iPhoneSDKの教科書(秀和システム、2009/3)赤松正行
【iPhone、洋書】
The iPhone Developer's Cookbook(Addison & Wesley、2008/10)Erica Sadun
Beginning iPhone Development(APress、2008/11)Dave Mark
iPhone SDK Application Development(O'Reilly、2009/1)Jonathan Zdziarski
iPhone SDK Programming(Wiley、2009/3)Maher Ali
6:名称未設定
09/05/22 11:58:48 IXZ/p5lIi
>>1乙
関連スレ追加
Objective-C [ObjC part:4];
スレリンク(tech板)
7:名称未設定
09/05/22 11:59:29 Fdy4QDoQ0
>>1乙!!
8:名称未設定
09/05/22 12:07:08 IXZ/p5lIi
FAQ
Q: Windowsで開発出来る?
A: 出来ません。Macを買ってください。
Q: 一万円払わないといけないの?
A: シミュレータでの開発だけなら無料で出来ます。
実機への転送、App Storeでの配信にはiPhone Developer Program(年会費約一万円)への加入が必要です。
9:名称未設定
09/05/22 15:04:00 U9kmBH4Li
>>1乙っす
10:名称未設定
09/05/22 18:40:14 jougPNfW0
>>1にかいてある項目に番号がふってあるが
4が二つあるので
11:名称未設定
09/05/23 00:50:04 jdz0gYss0
儲かるアプリ作るのっていくらぐらい必要?
1万円で大もうけ出来る?
12:名称未設定
09/05/23 01:06:45 D/gQ+UVn0
おまえじゃ無理ってことははっきり言える
13:名称未設定
09/05/23 01:48:23 BnSLHDmJ0
>>4
iPhone板に立った開発スレがどういう経過を辿ったのか知ってるのか?
それはそれは酷かった
14:名称未設定
09/05/23 02:55:51 QI9QCWW70
ほとんどのアプリはたいして売れないって現実をつきつけられて期待しすぎた信者がファビョったスレだったな。
15:名称未設定
09/05/23 03:48:14 6euyOCqYi
例えば、NavigationController の RootViewContoroller から
MyAppDelegate のメソッドにアクセスするには、どうすればよいのでしょうか?
16:名称未設定
09/05/23 04:21:50 aCjfWkCk0
まずまな板を用意してだな
17:名称未設定
09/05/23 04:52:49 xyEEVO7oi
>>15
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
18:名称未設定
09/05/23 10:57:49 ZfErfsMX0
まだ一つも売り物出してないんだけどさ、
ITリテラシーの低い情弱どもがレビューで騒いでるのを見ると
一万払ってシコシココード書いたのを小銭レベルで売るのがアホらしくなりそうだわ。
ある意味「信者」がユーザーの大半な方が
ポリシーを共有できていいのかもしれん
19:名称未設定
09/05/23 11:09:42 oOLIIYLU0
みんなに使ってもらおうと無料で公開しても、
「無料なので文句は無いですが、私が欲しかったxxxの機能がないので,
星一個。」
とか書かれるからな。
20:名称未設定
09/05/23 11:23:09 rdu8Y63N0
そりゃxxxの機能つけないのが悪いわ
21:名称未設定
09/05/23 11:42:25 t2JTmqfqi
愚痴はここのスレでなくていいんでないかい?
22:名称未設定
09/05/23 12:31:02 tNCkvIFx0
「iPhoneアプリ開発者が愚痴るスレ」も必要なようだな
23:名称未設定
09/05/23 12:38:47 BnSLHDmJ0
ひとまずPending Contractに関して愚痴るのはこちらでどうぞ
iPhone Developer Program Pending Contract 2日目
スレリンク(mac板)
24:名称未設定
09/05/23 13:15:02 jdz0gYss0
大して儲からなくて、無料だと文句言われるのかwww
自分用に作って終わるのが一番良さそうだな。
25:名称未設定
09/05/23 14:57:22 jYx7SQ8f0
>>22
愚痴だけじゃあれなんで、雑談スレはどう?
値段の付け方とか、プロモーション方法とか。
26:名称未設定
09/05/23 15:07:37 lLKAxyeci
>>25
あまり乱立させてもあれなんで、ペンコンスレを雑談兼用になればいいんじゃない?
プログラミング以外の話はすべてそこに集約してはどうだろう
27:名称未設定
09/05/23 15:38:15 rIHlLX+W0
>>26
ねーよ
勝手に他スレに迷惑かけるな
28:名称未設定
09/05/23 16:00:57 NA36nwQR0
マ板でやれ。
29:名称未設定
09/05/23 16:18:23 i4k86/+5i
なんでネイティブアプリ開発スレでやらないの?
あそこはもとから雑談含んでるスレだと思ってたが。
30:名称未設定
09/05/23 16:21:12 BnSLHDmJ0
>>28
あそこは何となく向いてない気がする
31:名称未設定
09/05/23 17:26:00 Bcjq1COl0
>>29
低レベルな人が許せない人がいて雰囲気が悪いから
こういう初心者も温かく見てくれるスレがあると
初心者にとってはありがたい。
32:名称未設定
09/05/23 17:42:55 NA36nwQR0
上級者スレは上級者の上級者による愚痴スレだからな
33:名称未設定
09/05/23 18:08:52 OfIdOHcS0
初心者だけが集まらなかったら、それはそれでカオスな事になるだろうけどな。
34:名称未設定
09/05/23 18:13:19 OfIdOHcS0
>>33
×集まらなかったら
○集まったら
35:名称未設定
09/05/23 18:38:18 53XDl/WU0
いろいろ愚痴りたいよなあ。
このスレで愚痴りながら初心者の相手してやろうぜ。
36:名称未設定
09/05/23 19:18:07 OfIdOHcS0
iPhone開発スレの基本リアクション
儲かると聞いたので開発したいです→テメェじゃ儲からねえよ氏ねカス
絶対に売れる自信があるんです→だったら金払って開発依託しろ氏ねカス
本当はアプリを作ってみたいだけなんです→ウエルカム!
37:名称未設定
09/05/23 22:02:00 o9rJhs3c0
.NETのAPIとの対応表が無いのはなんでなのですか?
Javaは用意してあるのにAppleはなぜ用意しないの?
38:名称未設定
09/05/23 22:09:51 UGx/BYmC0
.NETって何?うまいの?
39:名称未設定
09/05/23 22:28:24 OfIdOHcS0
>>38
不味くて食えたもんじゃない
40:名称未設定
09/05/23 22:48:24 CeEdkYJ10
UITableViewについて質問です。
Cellの内容を瞬時に変更することはできるのでしょうか。
41:名称未設定
09/05/23 22:51:46 OfIdOHcS0
>>40
reloadData
42:名称未設定
09/05/23 23:45:10 OtvhZpY80
>>36
儲かると勘違いしてるやつへの忠告は親切心からのものだぜ。
>>37
中身がまるで違うのに対応表なんてムリ。
>>38
できると儲かるらしいよ。Objective-Cより需要は多いだろうし。
しかも、ごちゃごちゃしてるから保守案件でもたんまり稼げる。
43:名称未設定
09/05/24 00:03:18 HfsusODG0
>>37
Javaとの対応表ってマイクロソフトが準備してるんじゃないの?
44:15
09/05/24 01:36:22 FocE/Bbri
>>17
すいません。書き方が悪かったようです。
例えば、新規プロジェクトを Navigation-Based-Application(プロジェクト名「test」) で作成したとします。
testAppDelegate に - (void)hoge; を追加した場合に、rootViewController から hogeメソッドを実行するにはどうすればよいでしょうか?
45:名称未設定
09/05/24 02:03:01 UfJY+cJc0
testAppDelegate *appDelegate = (testAppDelegate *)[[UIApplication sharedApplication]delegate];
[appDelegate hoge];
こんなんでOKです
appDelegateは別の名前でもよい
右側は現在起動中のアプリの代表クラスを取得する命令
そのままだとid値が返るのでキャストしている
アップルのサンプル見る限りではこの方法がスタンダードっぽい
別の方法としてid値をそのまま利用するなら下のような方法もある
id appDelegate = [[UIApplication sharedApplication]delegate];
objc.msgSend(appDelegate,@selector(hoge));
46:名称未設定
09/05/24 02:04:50 UfJY+cJc0
最後の行間違えた
誤 objc.msgSend(appDelegate,@selector(hoge));
正 objc_msgSend(appDelegate,@selector(hoge));
47:15
09/05/24 02:29:37 FocE/Bbri
>>45
ありがとうございます。
最初に
[[[UIApplication sharedApplication] delegate] hoge];
これは試していたのですが、キャストしてやればよかったんですね。
これでもうまくいきました。
[(testAppDelegate *)[[UIApplication sharedApplication] delegate] hoge];
48:15
09/05/24 03:10:51 FocE/Bbri
逆に、UIApplicationDelegate のメソッドが呼ばれた時に、
rootViewController が表示されているか判断して、
表示されている場合は、rootViewController のメソッドを実行することも可能なのでしょうか?
49:名称未設定
09/05/24 04:32:08 ZqNdpccN0
UITableViewを継承したクラスのなかで、下記のようなコードで指定行を表示するようにしたかったのですが、
まったく機能しません。
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:12 inSection:0];
[self scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
書き方間違ってますでしょうか。
50:名称未設定
09/05/24 05:30:24 joiQF9IDi
>>48
if (rootViewController.view.superView) {
[rootViewController hoge];
}
51:名称未設定
09/05/24 06:34:29 R4CNlZi90
>>48
速度を気にしない処理ならNSNotificationでも良いと思う。
52:名称未設定
09/05/24 13:17:27 qS58jhxG0
>>47
そのメソッドだったら、別にキャストしなくても
[[[UIApplication sharedApplication] delegate] hoge];
で全く問題なく動くはず
53:名称未設定
09/05/24 15:35:39 CnUiPHWR0
警告が出るんじゃね?
54:名称未設定
09/05/24 15:45:17 rtcNDZ1a0
>>52
キャストを知ってる初心者も珍しいが、
一応初心者スレなんだし、メッセージングとか理解してないと危ないような
アドバイスはやめとこうぜ。
55:名称未設定
09/05/24 15:50:18 KXMS/pef0
>>52
動くには違いないけど、“全く問題なく”というのは言い過ぎ。
56:名称未設定
09/05/24 16:59:26 CnUiPHWR0
便乗すまん
キャストが正しいかどうかってどうやって判断すりゃええのん?
動的に型をチェックする方法がわからん
57:52
09/05/24 17:15:20 qS58jhxG0
確かに警告は出るが。。 >>47 は警告がでるけど動く事は、当初から認識してたのか
>>56
if( [object isKindOfClass:[Hoge class]]] )
または isMemberOfClass:
またクラス名の文字列を取得するのは, MacOS X だったら className だったんだけど、
iPhone だとこのメソッドが無いみたいで [[object class] description] で取得できる
58:名称未設定
09/05/24 17:36:55 2LnMxi26i
>>57
NSString * NSStringFromClass(Class class);
だよっ!
59:名称未設定
09/05/24 17:44:50 3K8kbShj0
>>57
つNSStringFromClass([Hoge class]);
60:名称未設定
09/05/24 17:45:54 3K8kbShj0
>>58
ごめ。かぶった
61:名称未設定
09/05/24 17:45:55 CnUiPHWR0
>>57-58
ありがとう!
62:名称未設定
09/05/24 19:00:23 t1CYAEmk0
皆さん、開発マシンは、何使ってます?
白ポカリでも、十分?
まだマックは未保持。
63:名称未設定
09/05/24 19:08:47 Xrvo4hQM0
全然OK。
64:名称未設定
09/05/24 20:36:52 c0Q42Y+d0
ポカリじゃ開発は難しいでしょ
65:名称未設定
09/05/24 20:51:57 P0A7Ebu20
>>62
> 白ポカリ
白ポカリや青ポカリじゃ無理。
66:名称未設定
09/05/24 21:00:29 KXMS/pef0
どんな餌でも釣れるスレだな
67:名称未設定
09/05/24 21:08:15 c2tZcjh50
こんちには みさなん おんげき ですか? わしたは げんき です。
この ぶんょしう は いりぎす の ケブンッリジ だがいく の けゅきんう の けっか
にんんげ は もじ を にしんき する とき その さしいょ と さいご の もさじえ あいてっれば
じばんゅん は めくちちゃゃ でも ちんゃと よめる という けゅきんう に もづいとて
わざと もじの じんばゅん を いかれえて あまりす。
どでうす? ちんゃと よゃちめう でしょ?
68:名称未設定
09/05/24 21:40:04 y67e8R6Ii
>>64,>>65
ツッコミたいのをグッと堪えたのに
69:名称未設定
09/05/24 22:17:57 t1CYAEmk0
>>62
自己レスです。
ポカリでは、無理ですね。
ポリカですね。
でも、ポリカでは、つらいですか。
70:名称未設定
09/05/24 22:37:00 qS58jhxG0
>>57-58 こんな関数があったとは(><)
>>69
ポリカ使ってるけど,全然つらくないよ。前が PowerBook だったから、すごい快適。
いろんなアプリをたくさん立ち上げてると,メモリ(2G)が足りない感じがあるし、
画面は大きいのが欲しいと思うときもあるけど。
71:名称未設定
09/05/24 22:52:36 KXMS/pef0
>>70
要するにポリカじゃつらいって事だろ?
72:名称未設定
09/05/24 23:04:01 RJimGWo90
ポリカって何?初心者スレなんだから初心者にも判るように正式名称で書け!
73:名称未設定
09/05/24 23:21:25 qIas7pVF0
>>69
現行のMacBook Whiteなら同じクロックのアルミと近い性能があるから問題なし。
NVIDIA GeForce 9400Mも載ってるし。
74:名称未設定
09/05/24 23:39:29 UfJY+cJc0
>>72
MacBook White
筐体がポリカーボネート製なので略に使用したものと思われる
一応今後も質問ありそうなので以下勝手にまとめる
iPhone向けアプリ開発はCPUにintel製積んでるMacならどれでもできる
デスクトップならMac mini、ノートならMacBookの一番安いのでも可能
明確な「これが出来ないから困ることになる」ってことはない
もちろんより快適にとか言い出せばきりはないので、その辺は導入にかけられる予算次第
75:名称未設定
09/05/25 00:11:35 zkLPR6RJ0
MacBook竹を開発用に買ったんだけど、
Xcodeと外部エディタとIBとシミュレーターと
Finderが開いてるとSafariのドキュメント
見ながら開発できねえや。
マルチディスプレイって、ケーブル買ってくれば
OKなんだよね?
76:名称未設定
09/05/25 00:35:31 OjQ9cD6u0
ディスプレイも買えよ
77:48
09/05/25 02:14:11 DqYlnZNsi
>>50
度々すいません。
その場合、rootViewController はどのように取得すればいいのでしょうか?
rootViewController *viewController = [[rootViewController alloc] ...
とかだと別物になってしまいますよね?
78:名称未設定
09/05/25 07:18:32 zxIVntNwi
>>77
App Delegateがインスタンス変数として保持し、そのメソッドのなかで>>50。
または、>>51で言われているようにノーティフィケーションを使い、View Controller側の処理はView Controllerに自分でやらせる。
かな。
79:名称未設定
09/05/25 07:25:27 rAO2jp990
テンプレートの Navigation Controller を使ったアプリだったら,
testAppDelegate のヘッダに、rootViewController を参照する変数を作り、 Interface builder
で rootViewController と接続する。
(testAppDelegate がnavigationController とつながっているのと同じようにrootViewControllerをつなげる)
また別のやり方では,
[navigationController topViewController] が rootViewController であるかどうか判定する。
判定のやり方は>>57
80:名称未設定
09/05/25 15:31:11 KHXiKz4i0
>>78,79
ありがとうございます。
以下の方法で、やりたいことが実現できました。
if ([NSStringFromClass([[navigationController topViewController] class]) isEqualToString:@"RootViewController"])
{
[[(RootViewController *)[navigationController topViewController] titleLabel] setText:string];
}
81:名称未設定
09/05/25 17:42:23 6p17fcAq0
動的にnavigationItemを追加したり、
削除したりって変更したりってどうやったらできるんだろうか?
pushとかpopしてnavigationItemが変わってるっていうならわかるんだけど、
例えば、UIViewにボタンが設置してあって、
そのボタンを押したらnavigationItemが変わるみたいな。
82:名称未設定
09/05/25 18:03:46 ywUYztJz0
>>81
UINavigationItemクラスのプロパティで変更できるよ。
UIBarButtonItem *button = [[UIBarButtonItem alloc] ~]
self.navigationItem.rightBarButtonItem = button;
[button release];
とか。
83:名称未設定
09/05/25 19:09:39 6p17fcAq0
>>82
例えば、UIViewにボタンを設置して、
そのIBActionにUIBarButtonItemを追加するようなメソッドを指定しても、
ボタンを押しただけぢゃ追加されないと思うよ。
教えてくれた方法だと、例えばpopとかpushとかしてViewを再描画しないと追加されないでしょ?
それを、動的にボタンを押しただけで描画されるにはどうしたらいいのかな?ってわけさ。
84:名称未設定
09/05/25 19:56:24 EKln9c8Z0
>>83
ボタン押され時に再描画もすりゃいいじゃん。setNeedsDisplayとか使ってもいいし。
85:名称未設定
09/05/25 20:54:21 IA5t1qp90
こっちのスレの方が元スレより正常運転してるのが滑稽だ…
86:名称未設定
09/05/25 22:24:51 JwgyP9yHi
本スレは雑談だけに使えばいいさ
あっちにコード書いても“基本おじさん”に一括されて終わりだし
87:名称未設定
09/05/25 22:27:28 8gjwm5L3i
基本おじさんw
88:名称未設定
09/05/25 23:18:10 fyqEhjML0
You can't do it !
89:名称未設定
09/05/26 05:43:28 S6udQu0+0
禿携帯買って、禿げマク買うなんて釣られ過ぎ。
大して儲からないのに、どんだけ金使うの。
90:名称未設定
09/05/26 06:37:29 TTeGRdfg0
ViewControllerを二個つかったアプリを作っているんですが、画面回転に追従してこないのは何が原因なんでしょう?
AppDelegate内にAViewController,BViewControllerをIBで作成して各コントローラ単独では回転できるんですが、AViewControllerからAppDelegate経由でBViewControllerを呼び出すとAViewControllerは横画面なのにBViewControllerは縦画面になっちゃうんですが。
viewWillAppearで縦横を判断して回転させるみたいな処理が必要なんでしょうか?
91:名称未設定
09/05/26 08:48:37 NTffK6lV0
>>89
それが現実歪曲空間ですよ
92:名称未設定
09/05/26 10:43:36 oF6CeKYh0
>>89
こんなに楽しい遊びはないだろ。Frameworkきれいだし。
93:名称未設定
09/05/26 10:44:33 oF6CeKYh0
>>90
表示されてないときは、向きが管理されてない。
94:名称未設定
09/05/26 11:35:09 Wz5MtZnn0
表面だけ眺めてても見えないような、新たな使い方を発見する度にしびれるな
95:名称未設定
09/05/26 11:59:48 iwboRq210
>>90
どういうタイミングで、ってのは気にした事も無かったんだけど、
とりあえず
shouldAutorotateToInterfaceOrientation:
がちゃんと実装されていれば自動的に回転してるなあ
参考にならなくてスマン
>>89
海外旅行、ダイビング、登山、ドライブetc
大概の趣味はもっと金かかるぞ
96:90
09/05/26 13:04:18 FJN1T14X0
shouldAutorotateToInterfaceOrientationはYESを返す様にしているからBViewControllerの画面を表示させてから回転させるときちんと回転するんですよ。
AViewControllerで横画面にした状態からBViewControllerを呼び出すと縦に戻される原因が何かわからないんです。
>>93
viewDidAppearでも良いんですが自前で回転させるしかないの?
97:名称未設定
09/05/26 13:13:30 y1bOQPGSi
>>96
AとBをさらに一つのView Controllerに入れて管理すればできそう。
試してなくてゴメンだけど。
98:名称未設定
09/05/26 13:15:26 Y2jToh1H0
>>90
>ViewControllerを二個つかったアプリを作っているんですが、画面回転に追従してこないのは何が原因なんでしょう?
ContainerView的なものに入れ子にしてContainerViewControllerに回転の処理を書けば?
僕も試してそうなったから、結局入れ子にした。
99:90
09/05/26 13:35:19 FJN1T14X0
>>97-98
ひんとをアザース!www
100:名称未設定
09/05/26 13:39:03 VP1JtW+60
iPhoneのホーム画面UIを自作しようと思うんですけど、
アイコンをソートしたとき、グリッドに沿って移動するような動きをしますよね?
そこでつまずいていまして。。。
みなさん、作るとしたらどんなView構成で、どんなメソッド使いますか?
ちなみに、僕は今、UIViewにscrollViewとpageControllerが乗っていて、
scrollViewにUIView(これがアイコン)を乗せています。
各々のスクロール、タッチ、ドラッグはUIViewのtouch系メソッドで検出しています。
101:名称未設定
09/05/26 13:48:07 VP1JtW+60
>>100です。
自己解決したっぽいです!
お騒がせしました。
102:名称未設定
09/05/26 13:48:55 Uk9k4a9w0
自分だったら、
>各々のスクロール、タッチ、ドラッグはUIViewのtouch系メソッドで検出しています。
はやらない。アイコンの view はタッチに無反応となるようにして、
scrollView (または別のオブジェクト)が各アイコンのタッチ、移動などを管理するようにする。
他のアイコンの移動アニメーションなんかが楽になると思うから。
103:名称未設定
09/05/26 14:04:32 VP1JtW+60
>>102
とても参考になりそうです。
scrollViewのスクロールは、おおもとのUIViewControllerにデリゲートメソッドを書いています。
そのUIViewControllerから、アイコンのtouchを検出するにはどうしたらいいんでしょう?
アイコンは、アイコン用のUIViewクラスを複数呼び出してscrollViewにaddSubViewしてます。
104:名称未設定
09/05/26 14:14:16 Uk9k4a9w0
scrollView のサブクラスの touchesBegan... でviewController を呼ぶとか。
アイコンの位置は決まった場所なんだから計算して分かるし、pointInside:withEvent: で
判定してもいいし。
105:名称未設定
09/05/26 14:52:18 VP1JtW+60
>>104
僕は頭が足りないので理解度50%ですけど、
scrollViewのscrollViewDidScroll...と、touchesBegan...って共存できないと思うんですよね。
アイコンたちに、viewControllerのプロパティを設定しておいて、
そこからviewControllerにアクセスして。。。という方法に変更しようかと思います。
ドラッグ中の当たり判定は、透明のviewをscrollViewの上にグリッドに沿って設置して、
viewControllerから見るようにしようかと思います。
106:名称未設定
09/05/26 15:04:28 Uk9k4a9w0
>>105
MyScrollView に touchesBegan...を実装して,そこで
[ self.delegate scrollViewDidAcceptTouch: ...];
[super toucehsBegan...];
のように、タッチイベントがあった事を delegate か viewController に教えてやる。
あと、UIScrollView は意味不明な挙動をする事が多いから,サブビューのアイコンがタッチイベントを
受け付けるようにすると,後々大変かも?ってのもある。
(例えば,ページ切り替えジェスチャとアイコンタッチのジェスチャとが共存しにくいとか。)
107:名称未設定
09/05/26 15:14:29 VP1JtW+60
>>106
なるほど!理解しました!
>例えば,ページ切り替えジェスチャとアイコンタッチのジェスチャとが共存しにくいとか。
まさに、昨日苦戦して分岐分けしたところだ!
現状、ドラッグ開始したらscrollViewがスクロール禁止するようにしてるんだけど、
そのドラッグ開始のタイミングが微妙。
急ぎすぎると、スクロールしちゃうとかってバグがあったから、
こっちのほうが断然いけそうな気がする。
108:名称未設定
09/05/26 15:56:01 VP1JtW+60
>>106
やってみました。
一応、scrollViewからtouchを検出しました。
そこで、1つ疑問が。。。scrollViewに乗ってるアイコンたち、
どれがタッチされたかとかって、座標で見るしかないのかな?
109:名称未設定
09/05/26 16:52:57 jIp8m6d70
以下のコードでは、okMethodは実行できますが、ngMethodは実行時にエラーになります。
@interface MyObject:NSObject{
NSMutableString *myValue;
}
@property (retain) NSMutableString *myValue;
@end
@implementation MABValueModel
@synthesize myValue;
-(void)okMethod{
NSMutableString *_inputValue = [[NSMutableString alloc]initWithString:[self myValue]];
[_inputValue deleteCharactersInRange:NSMakeRange(0,[[self myValue] length]-1)];
[self setMyValue:[NSString stringWithFormat:@"%@",_inputValue]];
[_inputValue release]
}
-(void)ngMethod{
[[self myValue] deleteCharactersInRange:NSMakeRange(0,[[self myValue] length]-1)];
}
違いは、NSMutableString のクラスメソッドdeleteCharactersInRange:を、
propertyであるNSMutableString *myValueに実行させるか
一時変数のNSMutableString *_inputValueに代入してから実行させるかだけの
違いだと思うのですが、なぜ一方は実行できて、もう一方はエラーになるのでしょうか。
効率で考えると、一時変数の確保も解放もしないngMethodの方が良いと思っているのですが。
どなたか、このふたつの違いをお教えください。
cocoaスレで聞くべきかもしれませんが、宜しくお願いします。
110:109
09/05/26 16:55:07 jIp8m6d70
@implementation の行を間違えましたので書き換えました。
すみません。
以下のコードでは、okMethodは実行できますが、ngMethodは実行時にエラーになります。
@interface MyObject:NSObject{
NSMutableString *myValue;
}
@property (retain) NSMutableString *myValue;
@end
@implementation MyObject
@synthesize myValue;
-(void)okMethod{
NSMutableString *_inputValue = [[NSMutableString alloc]initWithString:[self myValue]];
[_inputValue deleteCharactersInRange:NSMakeRange(0,[[self myValue] length]-1)];
[self setMyValue:[NSString stringWithFormat:@"%@",_inputValue]];
[_inputValue release]
}
-(void)ngMethod{
[[self myValue] deleteCharactersInRange:NSMakeRange(0,[[self myValue] length]-1)];
}
違いは、NSMutableString のクラスメソッドdeleteCharactersInRange:を、
propertyであるNSMutableString *myValueに実行させるか
一時変数のNSMutableString *_inputValueに代入してから実行させるかだけの
違いだと思うのですが、なぜ一方は実行できて、もう一方はエラーになるのでしょうか。
効率で考えると、一時変数の確保も解放もしないngMethodの方が良いと思っているのですが。
どなたか、このふたつの違いをお教えください。
宜しくお願いします。
111:名称未設定
09/05/26 17:17:18 Uk9k4a9w0
>>1
>4. 質問は可能な限り具体的に。ただ「エラーが出ます」では
> エスパーかスタンド使いでなければ答えられません。エラー内容をちゃんと書きましょう。
112:名称未設定
09/05/26 17:22:35 VP1JtW+60
>>110
エラーとは関係ないけど、とりあえず、代入は必要ですよね?
-(void)ngMethod{
myValue = [[self myValue] deleteCharactersInRange:NSMakeRange(0,[[self myValue] length]-1)];
}
113:名称未設定
09/05/26 17:44:54 7HZTBIqY0
>>112
必要ない。っていうか、void だし…適当やなぁ…
>>109
myValue が nil と見た。あと、インスタンス変数にアクセスするのに、いちいち
[self myValue] なんてしなくていいよ。
- (void) ngMethod {
if (!myValue || [myValue length] == 0)
myValue = [[NSMutableString alloc] initWithString:@"empty"];
else
[myValue deleteCharactersInRange:NSMakeRange(0, [myValue length]-1)];
}
114:110
09/05/26 17:45:44 jIp8m6d70
>>111
すみません。
このメソッドが実行されると、デバッガコンソールに
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with deleteCharactersInRange:'
と表示されます。
[self myValue]
は、NSMutableStringです。
>>112
そうなんですか
[_inputValue deleteCharactersInRange:~~~]
では、_inputValueの中身の文字列が変更されたので、
[[self myValue] deleteCharactersInRange:~~~]
とすると、[self myValue] の中の文字列が変更されるのかと思っていました。
115:名称未設定
09/05/26 17:48:42 Y5CyaPOR0
>>110
myValueを生成してないんじゃね?
116:名称未設定
09/05/26 17:48:54 kJ5iINYMi
>>114
- (void)setMyValue:(NSMutableString *)newValue {
if (myValue != newValue) {
[myValue release];
myValue = [newValue mutableCopy];
}
}
普通プロパティはNSStringにする気がする。
>>112
おい。
117:名称未設定
09/05/26 17:55:27 iwboRq210
生成の時点で正しくmutableとして生成されてないのでは?
あるいはどこか他のところで意図せずNSStringが代入されているとか
ngMethodに
NSLog( [[myValue class] description] );
を入れてみ?
118:名称未設定
09/05/26 18:03:26 Uk9k4a9w0
>>110
>[self setMyValue:[NSString stringWithFormat:@"%@",_inputValue]];
ここでも型が間違っているように,どこかで myValue に NSMutableString ではなくて
NSString をいれて仕舞っているんだと思う。
119:110
09/05/26 18:03:55 jIp8m6d70
>>117
NSLog( [[myValue class] description] );
を入れてみたところ、
NSCFString
と表示されていました。
「意図せずNSStringが代入されている」なのかもしれません。
一度、コード全体を確認してみます。
ありがとうございました。
>>113
> あと、インスタンス変数にアクセスするのに、いちいち
> [self myValue] なんてしなくていいよ。
ホントだ!ありがとうございます。
>>みなさん
ありがとうございました。
ちょっとテストコードで検討してみます。
120:名称未設定
09/05/26 18:08:03 7HZTBIqY0
>>117, 109
クラスクラスタで、NSString, NSMutableString -classは、両方 NSCFString
を返すので、確認できん。respondToSelector: も区別できん(両方 YES)。
なので、プログラマが気をつけるしかないかな?
@try {} @catch{} で、NSInvalidArgumentException を検出するくらいだが、
推奨されてないしね。
121:名称未設定
09/05/26 18:11:07 VP1JtW+60
>>113
>>116
okMethodでsetMyValueしてたからさ。
エラーとは関係ないけど。
122:名称未設定
09/05/26 18:13:30 VP1JtW+60
↑あ、deleteか
123:名称未設定
09/05/26 18:16:15 7HZTBIqY0
訂正 > 113
nil にメッセージ送っても問題ない事を忘れていた…orz
>>121
おぉ、ご明察。先にokMethod呼んでる可能性もあるね。
124:名称未設定
09/05/26 18:20:42 TZq+2pwV0
myValueにどうやって値を設定しているのか分からんが、これだとngMethodでこける。
myObject.myValue = @"hogehogefoofoobar";
こっちはいける。
myObject.myValue = [NSMutableString stringWithString:@"hogehogefoofoobar"];
そりゃそうやんなぁ。
125:名称未設定
09/05/26 18:40:04 iwboRq210
>>120
おおほんとだ
mutableでもNSCFStringが返るね
[object isKindOfClass:[NSMutableString class]]
でも判別できない(immutableなstringでもYESが返る)
ということで>>117は忘れて
まあそこでmutableなstringではないのはたしかっぽいけど
>>116みたいにセッタをかくのが確実だろうね
126:110
09/05/26 18:45:43 jIp8m6d70
いろいろありがとうございます。
ngMethodも動くようになりました。
>>123
myValueを設定している箇所が言われたとおりでしたので、
self.myValue = [NSMutableString stringWithString:@"hoge"];
としました。
ありがとうございました。
>>116
Mutableな時は、setMyValueはダメなんですね。
[self setMyValue :@"hoge"];
[myValue setString:@"hoge"];
self.myValue = [NSMutableString stringWithString:@"hoge"];
この三つの違いが分からなくなっていました。
文字を変更するだけの時はsetString:でokですよね?
127:名称未設定
09/05/26 19:01:21 Uk9k4a9w0
>>126
上から
- myValue 自体が @"hoge" (NSString) に置き換わる(型が変わってしまう)
- myValue のNSMutableStringインスタンス自体はそのままで、示す文字列が @"hoge" に置き換わる
(あらかじめmyValue がNSMutableString でなければならない)
- myValue 自体が新たな NSMutableString に置き換わる。
128:110
09/05/26 19:19:54 jIp8m6d70
>>127
とてもわかりやすかったです!
ありがとうございました
129:116
09/05/26 20:57:45 kJ5iINYMi
>>126
>self.myValue = [NSMutableString stringWithString:@"hoge"];
>としました。
それはかなり良くない解決法ですよ。
どうしてもngMethodを使いたくて、"とりあえず"動かすなら>>116のほうがいい。
でも一番いいのは多分↓
@interface MyObject:NSObject{
NSString *myValue;
}
@property (copy) NSString *myValue;
@end
@implementation MyObject
@synthesize myValue;
- (void)okMethod {
NSMutableString *newValue = [NSMutableString stringWithString:self.myValue];
[newValue deleteCharactersInRange:NSMakeRange(0, [newValue length] - 1)];
self.myValue = newValue;
}
@end
130:110
09/05/26 22:03:53 jIp8m6d70
>>126
アドバイスありがとうございます。
後学のため、何故に「良くない解決法」なのか
詳しく教えていただけないでしょうか。
ご呈示いただいたメソッドは、仮の変数を使うと言う形ですね。
このメソッドの最後で、newValueはリリースする必要はありますか?
また、この場合、
@property (copy) NSString *myValue;
とした方が
@property (retain) NSString *myValue;
よりも良いのはなぜなのでしょうか?
self.myValue = newValue;
の時に、newValueのインスタンスそのものではなく、
newValueの中身(の文字列)がコピーされると言う認識で
あっていますか?
すみません、基本が分かっていない質問で申し訳ないです。
131:90
09/05/26 23:04:54 Q/SHF4PC0
二個のViewControllerを一つのViewControllerの子にしようとIBを立ち上げたのですがViewControllerの中にViewControllerを入れ子にできないのよね(´・ω・`)
まとめるっていうのはひとつのVIewControllerに複数のUIViewを入れるって事なのかしら?
132:名称未設定
09/05/26 23:43:28 Wz5MtZnn0
>130
そのプロパティにはNSStringの他にそのサブクラスのNSMutableStringなんかも警告無しに代入出来ちゃう。
NSMutableStringだと代入されたあとに中身が変わる可能性があり、
copyなら代入時の内容が次の代入までそのままであることが変なことしない限り保証されるけど、
retainだと保証されない。
副作用さえわかってれば、あとは好き好きだとおもうけど。
変なタイミングで中身変えられて困るようなものつくってるときに、
一緒に開発する相手が信用できない場合はcopyを選ぶかも。
133:名称未設定
09/05/27 07:20:49 cHsJy+E80
>131
ViewだけIBで書いて、あとはコードで書いたほうが手っ取り早い。
134:126
09/05/27 09:28:16 4oe84EHTi
まず、設定する側にNSMutableStringを強要するというのがバグの温床となる。
設定される側が、自分の責任で、NSStringが来ようがNSMutableStringが来ようが適切に処理するようにしておけば、
設定する側は何も気にせず値を入れられるようになり、プログラミングが楽で、バグが出る可能性も低くなるというのは分かってもらえると思います。
そういう意味で、ngMethodを'とりあえず'動かすならその場しのぎの>>126でなく、後々のためにも>>116の方がいいということです。
でも実は>>110のngMethodを動かそうとすること自体が問題です。
今回のngMethodでは
[[self myValue] deleteCharactersInRange:range];
としてしまっていますが、これはゲッタを介して得たインスタンス変数に、セッタを介さずに直接変更を加えてしまっています。
ngMethodは自分のオブジェクトの中でのことなので問題が表面化しませんが、
ngMethodが動くということは、外部からも同じく、セッタを介さずにインスタンス変数を直接変更出来るようになっているということです。
これでは、情報を隠蔽化するというプロパティ、アクセッサの役割を全く無駄にしています。
アクセッサの役割を活かすには、インスタンス変数への変更は
1),内部からインスタンス変数を直接変更する
2),内部からセッタを介して設定する
3),外部からセッタを介して設定する
に限定しておいた方がいい。
135:129
09/05/27 09:29:21 4oe84EHTi
>>134の続き
そこでmyValueをNSStringに変えてしまって、2の方法で目的を実現したのが>>129です。
別の方法として、myValueをNSMutableStringのままで、内部からは1の方法で目的を実現し、
かつ外部からは直接変更出来ないように(実は出来るけど、警告は出る)したのが以下です。
@interface MyObject:NSObject{
NSMutableString *myValue;
}
@property (copy) NSString *myValue;
@end
@implementation MyObject
@synthesize myValue;
- (void)setMyValue:(NSString *)newValue {
if (myValue != newValue) {
[myValue release];
myValue = [newValue mutableCopy];
}
}
- (void)okMethod {
[myValue deleteCharactersInRange:NSMakeRange(0, [myValue length] - 1)];
}
@end
ちょっと神経質すぎるかもしれませんが。
136:130
09/05/27 09:29:52 53+HxMiOi
>>132
ありがとうございます。
なるほど。違い理解できました。
保守性考えた時に良いんですね。
137:134=135=129
09/05/27 09:32:34 4oe84EHTi
ミスった。
>>134=>>129で、>>126へのレスです。
長文連投すいません。
138:110=126
09/05/27 09:43:08 53+HxMiOi
>>134-135
わかりやすい説明ありがとうございます。
良くない理由、理解できました。
コードの詳細は、これから頑張って理解します(笑)
良い流儀、潜在的危険な書き方などは、なかなか難しいですね。勉強します。
139:90
09/05/27 09:50:56 q4FN99i/0
>>133
そげな一言で片付けられるなら初心者スレに来ないですたい(´・ω・`)
1:IBでViewControllerをつくる。
2:新規ソース作成でViewControllerサブクラスを作成。ParentViewControllerとか名付ける。
3:ParentViewController.hのメンバに前述のAViewControllerとBViewControllerを含める。
こんな感じですか?
140:名称未設定
09/05/27 11:02:07 te2IdrEg0
>>139
iPhone用プロジェクトのUtilityアプリだっけ、Main ViewとFlip side Viewを切り替えるやつ、
あんな感じでWindow上にはRootViewControllerを乗っけておいて、
別に準備しておいたViewControllerを二つあとからコードで乗っければ良いんじゃないの?
乗っけ方はRootViewControllerのtoggleView:を参考にして
141:90
09/05/27 11:46:28 q4FN99i/0
なるほど。Utilityテンプレートを参考にするのですね。
あざーすwwww
142:名称未設定
09/05/27 11:55:49 2Y2lfcdv0
大事な言葉はふざけながら言わないほうがいい。
143:名称未設定
09/05/27 11:59:11 0yz1IPK80
>>142
人生に関しても初心者なんだよ
144:名称未設定
09/05/27 12:14:08 mqiaW5Jm0
まあ、答えてくれた人がリアルで知人・友人ってこともないだろうし、
お礼は一般的な表現にしたほうが良さそうだね
質問する側も答える側も気持ちよく使えるスレになったほうが結果として自分のためになるからね
145:名称未設定
09/05/27 13:28:26 0yz1IPK80
>>144
身近に詳しい人がいたら2chで聞かねーよw
146:90
09/05/27 13:38:29 q4FN99i/0
ありが㌧は良くてあざーすwwwはダメなの?(´・ω・`)
147:名称未設定
09/05/27 13:47:13 CnwAWwcoi
2chではこれくらい砕けた例の方がうれしいけどな。俺は。
148:名称未設定
09/05/27 13:47:53 CnwAWwcoi
×例
○礼
149:名称未設定
09/05/27 13:59:51 g/++ORAl0
>>146
それは常識で分かれよ
150:名称未設定
09/05/27 14:01:56 cHsJy+E80
>>146
>あざーすwwwはダメなの?
www付ける意味がわからん。
笑われてるみたいだ。
151:名称未設定
09/05/27 14:13:57 eTmr/DIti
Mac系プログラミングスレはお年寄りが多いから、言葉遣いには気をつけた方がいいぞ
152:名称未設定
09/05/27 14:17:53 fXcy/FvG0
ありが㌧やサンクスコはあってもあざーすwwwはないな。
153:名称未設定
09/05/27 14:25:45 0yz1IPK80
NGワード
・あざーすwww
・教えてエロい人
154:90
09/05/27 14:51:14 q4FN99i/0
>>151
サーセンwww
155:名称未設定
09/05/27 14:53:32 mORqVUJu0
ワロスw
156:名称未設定
09/05/27 15:18:09 oyCOwV010
>>154
>>151は煽りじゃなくて忠告だろ。お前最低だな。
157:名称未設定
09/05/27 16:47:26 rQRiXzwK0
あれで、真剣に謝ってるんだよ。そいういうのリアルに多いから。
158:名称未設定
09/05/27 19:38:57 xXgfT+F10
>>139
[rootViewController.view addSubView:subAViewController.view];
[rootViewController.view addSubView:subBViewController.view];
ControllerじゃなくてViewを入れ子にするんじゃないの?
159:名称未設定
09/05/27 19:41:41 te2IdrEg0
2chだから良いけどユーザーからのバグレポートにサーセンwwwとか返さないでくれよ?
160:名称未設定
09/05/27 20:06:01 3QkPjo0K0
質問させてください。
UIButtonを生成してaddSubViewするんですけど、
そのUIButtonをドラッグさせたいんです。
[button addTarget: self action: @selector(move:) forControlEvents: UIControlEventTouchDragInside];
このように、UIControlを追加して、
moveメソッドで座標を計算してUIButton自体を移動させたいんですけど、
どのようにしたらいいのでしょうか?
161:名称未設定
09/05/27 20:07:36 3QkPjo0K0
>>160の続きです。
Viewを移動するときは、- (void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) eventで、
CGPoint pt = [[touches anyObject] locationInView: self];
CGRect frame = [self frame];
frame.origin.x += (pt.x - self.startLocation.x);
frame.origin.y += (pt.y - self.startLocation.y);
self.frame = frame;
というふうに、移動するのはわかるのですが、
moveメソッドで、touchesを取得することができないんです。
試しに、UIButton生成時に、@selector(move:touches:)として、
touchesを出力してみると、
<UITouchesEvent: 0xd3ac90> timestamp: 33374.9 touches: {(
<UITouch: 0xd2b320>
phase: Began
tap count: 1
window: <UIWindow: 0xd18880; frame = (0 0; 320 480); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0xd196e0>>
view: <UIRoundedRectButton: 0xd2ba90; frame = (0 0; 50 50); opaque = NO; layer = <CALayer: 0xd2a3c0>>
location in window: {32, 58}
previous location in window: {32, 58}
location in view: {27, 33}
previous location in view: {27, 33}
)}
というような出力がでます。
<UITouchesEvent: 0xd3ac90>の中の<UITouch: 0xd2b320>が取れればいいのかと思ったのですが。。。
どうしたらよいでしょうか?
162:名称未設定
09/05/27 20:25:13 22k+iuM/0
まだリファレンスを通し読みしてるとこだけど、
タッチってタッチイベントがトリガーになってるから
スタート時に触れてる指は検出できないのかな?
163:名称未設定
09/05/27 20:43:16 VazsfHjr0
初心者だと既成のクラスだけを使うことに気が取られちゃうけど、
サブクラスをガンガン作るのが基本だし、楽。
ボタンを UIButton のサブクラスにして、そのクラスの
- (void) touchesMoved: (NSSet *) touches withEvent: (UIEvent *) event
で自分自身を移動させた方が速いような。[button addTarget:... なんてわざわざいらないし。
164:名称未設定
09/05/27 20:56:10 s15SM/9n0
教えて下さい。
オーガナイザに実機が登録できません
DEVICESの自分の実機名の横にある丸いやつは黄色になってます。
165:名称未設定
09/05/27 21:02:10 +XMdFu5wi
>>164
XcodeとiPhone再起動
166:名称未設定
09/05/27 21:15:35 s15SM/9n0
再起動してみました。
現象は変わりませんでした。
オーガナイザには下記のメッセージが出ます。
The Developer Disk Image could not be mounted.
Xcode could not find an appropriate Developer Disk Image to mount
on **** の iPhone. Please contact Apple for the 2.2.1 (5H11) device support package.
翻訳してみると
「Xcodeは、適切なDeveloper Disk Imageを見つけることができませんでした」
iPhoneがおかしいのでしょうか?
167:名称未設定
09/05/27 21:20:15 WunSuCD2i
SDKが古いってことはない?
2.2以前のままだったり。
168:名称未設定
09/05/27 21:29:40 s15SM/9n0
SDKは今年の一月にインストールしたやつです。
これって古いのでしょうか?
169:名称未設定
09/05/27 21:40:35 7HWgZ/zji
最新って3月じゃ。。。
とりあえず、2.2.1のSDKを入れ直してみては?
170:名称未設定
09/05/27 21:43:29 s15SM/9n0
了解しました。
最新のSDKを入れ直してみます。
171:名称未設定
09/05/27 22:27:50 s15SM/9n0
SDK入れ直したら認識しました。
SDKが古かったのですね。勉強になりました。
ありがとうございました。
172:名称未設定
09/05/27 22:46:25 0yz1IPK80
早いなw
俺はダウンロードだけで2時間かかった
173:名称未設定
09/05/27 23:42:13 wIEF1NkT0
テレホーダイか?
174:名称未設定
09/05/28 00:22:53 HCRi3vQK0
[window addSubView: viewController.view];
こういう書き方間違ってないですか?
175:名称未設定
09/05/28 01:12:27 Jf0hoENE0
>174
間違っていると感じた理由を述べよ
176:名称未設定
09/05/28 03:25:24 CAW0Jk+w0
>>174
俺もそんな書き方するよ。
177:名称未設定
09/05/28 06:54:51 e3ov4l76P
なんだか挙動がいまひとつ掴めていないので皆の衆のお知恵を拝借致したく候。
フルスクリーン用のUIViewの派生クラスを作っているんですが、ステータスバーの位置でtouchBeganが拾えないのは何故なんでしょう?
やったこと:
1:info.plistでstatus bar initial hiddenをYESに。
2:ViewControllerのdidRotateFromInterfaceOrientationでUIApplicationのStatusbarの向きを明示的に設定。
3:IBでAppDelegateのWindowのframe/boundsを320x480に。StatusbarはNoneを指定。
4:UIViewの派生クラスが含まれるViewControllerのStatusbarはNoneを指定。
5:ViewControllerに含まれるUIViewとUIViewの派生クラスにはframe/boundsを320x480に。
Viewは全てClip subviewしてScale to Fillで統一してます。
コントローラのdidAppearでframe/boundsでCGRectを見るとちゃんと320x480に設定されているんですが、ステータスバーの領域でtouchBeganが飛んでこないっす。
何か足りないんでしょうか。この状態で90度Landscapeにすると画面の右端がステータスバーの幅分だなんだか挙動がいまひとつ掴めていないので皆の衆のお知恵を拝借致したく候。
フルスクリーン用のUIViewの派生クラスを作っているんですが、ステータスバーの位置でtouchBeganが拾えないのは何故なんでしょう?
やったこと:
1:info.plistでstatus bar initial hiddenをYESに。
2:ViewControllerのdidRotateFromInterfaceOrientationでUIApplicationのStatusbarの向きを明示的に設定。
3:IBでAppDelegateのWindowのframe/boundsを320x480に。StatusbarはNoneを指定。
4:UIViewの派生クラスが含まれるViewControllerのStatusbarはNoneを指定。
5:ViewControllerに含まれるUIViewとUIViewの派生クラスにはframe/boundsを320x480に。
Viewは全てClip subviewしてScale to Fillで統一してます。
コントローラのdidAppearでframe/boundsでCGRectを見るとちゃんと320x480に設定されているんですが、ステータスバーの領域でtouchBeganが飛んでこないっす。
何か足りないんでしょうか。この状態で90度Landscapeにすると画面の右端がステータスバーの幅分だけ反応しなくなります。け反応しなくなります。
178:名称未設定
09/05/28 06:55:56 e3ov4l76P
投稿失敗したから二回submitしたらなんか変になった…orz
179:名称未設定
09/05/28 07:11:29 e3ov4l76P
書き直しますた。
なんだか挙動がいまひとつ掴めていないので皆の衆のお知恵を拝借致したく候。
フルスクリーン用のUIViewの派生クラスを作っているんですが、ステータスバーの位置でtouchBeganが拾えないのは何故なんでしょう?
やったこと:
1:info.plistでstatus bar initial hiddenをYESに。
2:ViewControllerのdidRotateFromInterfaceOrientationでUIApplicationのStatusbarの向きを明示的に設定。
3:IBでAppDelegateのWindowのframe/boundsを320x480に。StatusbarはNoneを指定。
4:UIViewの派生クラスが含まれるViewControllerのStatusbarはNoneを指定。
5:ViewControllerに含まれるUIViewとUIViewの派生クラスにはframe/boundsを320x480に。
Viewは全てClip subviewしてScale to Fillで統一してます。
コントローラのdidAppearでframe/boundsでCGRectを見るとちゃんと320x480に設定されているんですが、ステータスバーの領域でtouchBeganが飛んでこないっす。
何か足りないんでしょうか。この状態で90度Landscapeにすると画面の右端がステータスバーの幅分だけ反応しなくなります。
180:名称未設定
09/05/28 07:15:45 UEf8HiGki
>>179
サイズが320x480になってても位置がステータスバー分下にずれたままなんじゃないの?
181:名称未設定
09/05/28 07:30:23 e3ov4l76P
書き漏らしましたがrectのoriginを確認すると0,0なんですが。
他にズレているのを確認する方法ってあるんでしょうか?
IB上でもSize&Positionは0,0に設定されています。
182:名称未設定
09/05/28 07:42:50 OWeHaPT2i
>>181
windowとviewのbackgroundColorを明らかに違う色にしてみたりして確認したら?
183:名称未設定
09/05/28 07:54:24 e3ov4l76P
>>181
なるほど!
Windowを赤
UIViewを緑
UIViewの派生ビューを青にしてみました。
画面は全面青になっているので作成中なUIViewが全画面になっているのは間違いないっぽいです。
WindowsのSpy+みたいに実行中のウインドウを確認できる機能ってXcodeにないんでしょうか。
透明なステータスバーがある様な気がしてならないんですが…
184:名称未設定
09/05/28 08:10:00 JkcAL60Qi
>>183
シミュレータのバグらしい。
実機で試してもなる?
185:名称未設定
09/05/28 08:52:22 yUD3Ri7f0
>>184
orz
情報ありがとうございます。
後ほど実機で試してみます。
186:名称未設定
09/05/28 19:53:14 C4C9SL/w0
質問させてください。
UIViewのアニメーションを使おうと思うのですが、
下記の用にした場合、途中でアニメーションを停止することはできないのでしょうか?
CGAffineTransform startAngle = CGAffineTransformMakeRotation(-1.0f);
view.transform = startAngle;
CGAffineTransform endAngle = CGAffineTransformMakeRotation(1.0f);
[UIView beginAnimations: nil context: nil];
[UIView setAnimationDuration: 1.0f];
[UIView setAnimationRepeatCount: 1e100f];
[UIView setAnimationRepeatAutoreverses: YES];
view.transform = endAngle;
[UIView commitAnimations];
187:179
09/05/28 22:16:49 e3ov4l76P
実機で確認したところ問題無くtouchBeganが拾えましたorz
シミュレータの不具合だそうですが、こういった情報はどちらで見つけられるんでしょうか?
188:名称未設定
09/05/28 23:08:12 PW5hzmYx0
>>187
君がその情報を入手したのと同じ場所だよ。
189:名称未設定
09/05/29 00:18:47 uxWuGEcO0
>>186
beginAnimations~commitAnimationsによるアニメーションは、変化させている
プロパティと同じプロパティを変更するアニメーションを再設定することで、表示
時間や繰り返し数を変更できる(という仕様らしい)。
だから、提示された例の場合、
[UIView beginAnimations: nil context: nil];
[UIView setAnimationDuration:0];
[UIView setAnimationRepeatCount:0];
view.transform = CGAffineTransformIdentify;
[UIView commitAnimations];
とかすると止まるはず。
view.transformに設定する値は、endAngleと異なっていたら大丈夫
同じだと止まらないかもしれない。
190:名称未設定
09/05/29 00:38:17 y8Cu8ZaN0
Objective-Cのスレってないんですか?
191:名称未設定
09/05/29 00:39:56 2dj8vJ7i0
>>190
一応プログラム板にあるよ
Objective-C [ObjC part:4];
スレリンク(tech板)
でも過疎ってる...
192:名称未設定
09/05/29 02:26:12 3CESnk220
NSDataとNSStringの変換について質問させてください。
NSData自体はできてる(?)っぽいんですが、NSStringを出力させると何も出ません。
なにか勘違いしているでしょうか?
// テスト用データ作成
NSArray *array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
// テスト用データをアーカイバーにてNSDataに変換
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
// descriptionにて出力 (なんかたくさんバイト文字列の用な物が出る)
NSLog(@"%@", [data description]);
NSLog(@"----------------");
// UTF-8を用いて文字列に変換
NSString *strByte = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
// 出力(何も出ない!)
NSLog(strByte);
193:名称未設定
09/05/29 02:44:12 2WCMrySC0
NSArrayをNSDataに変換したのに
なぜNSDataからNSStringに戻そうとしてるの
194:179
09/05/29 06:03:24 YqKcCg+TP
>>188
なんと!過去ログをもう一度みてきます。
>>193
NSDataをシリアイズした後の戻し方を知りたいんじゃないかな?
195:184
09/05/29 06:58:05 AF2ypBX6i
>>187
公式のデベロッパフォーラムに同じ話題がいくつもあったよ。
あそこは検索使いやすいし、Appleの中の人も答えてくれたりするし、3.0の話しを堂々とできる唯一の場だし、
まだ覗いたことがないなら是非見ておいた方がいい。
196:名称未設定
09/05/29 10:16:20 ChTbvyIc0
>>192
>>194のいうようにNSDataをNSArrayに戻したいのであれば
NSLog(@"----------------");
NSArray *newArray=[NSKeyedUnarchiver unarchiveObjectWithData:data];
//出力
NSLog([newArray description]);
複数の文字列をまとめてエンコードしたいというのであれば
一つ一つdataUsingEncoding:でNSDataを作ってArrayに入れるべき
197:名称未設定
09/05/29 11:21:24 3CESnk220
>>196
>複数の文字列をまとめてエンコードしたいというのであれば
>一つ一つdataUsingEncoding:でNSDataを作ってArrayに入れるべき
実際は文字列を格納した配列ではなく
NSArray ◇-> NSDictionary ◇-> NSString + NSDictionary ◇-> 独自クラス ◇-> NSDictionary
というデータ構造をNSKeyedArchiverにてNSDataにして
それを文字列にしてDBに格納したいと思ってます。
独自クラスは<NSCoding>のプロトコルを実装しています。
NSCodingを実装していればそのルートオブジェクトを [NSKeyedArchiver archivedDataWithRootObject:obj]にて
一気にNSData -> NString とできると思ってるんですが間違ってますか?
198:名称未設定
09/05/29 12:03:34 tRjXKpLy0
つまりは、データベースに格納するために NSData <--> NSString の変換をやりたい
ということでしょう。
>>192 でやった
NSString *strByte = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
がダメだったのは、 data のエンコードが UTF8 ではなかったから。
多分 NSData を更に XML プロパティリスト化(NSPropertyListSerialization)すれば、
UTF8 でエンコードされた XML リストdata になるとおもう。
KeyedArchive NSData <--> UTF8 encoded NSData <--> NSString
ですね。もっと簡単なやり方もあるかも。
>NSCodingを実装していればそのルートオブジェクトを [NSKeyedArchiver archivedDataWithRootObject:obj]にて
>一気にNSData -> NString とできると思ってるんですが間違ってますか?
ただしいです。
199:名称未設定
09/05/29 12:05:58 tRjXKpLy0
>>198
>>NSCodingを実装していればそのルートオブジェクトを [NSKeyedArchiver archivedDataWithRootObject:obj]にて
>>一気にNSData -> NString とできると思ってるんですが間違ってますか?
正しくなかった(><)。 一気に NSData になるけど、そこから NSString は別の手段(>>198のような)
が必要ということです。
200:186
09/05/29 13:13:56 RB4EVl7B0
>>189
201:名称未設定
09/05/29 13:17:27 RB4EVl7B0
>>186です。
>>189
ありがとうございます。
無事、止めることができました。
いろいろ調べていると、UIViewのアニメーションはお手軽だけれどもを重い、
CAAnimationは複雑になりがちだけれども軽いという印象を受けましたが、
実際、どちらの方がよいのでしょうか?
また、CAAnimationにする場合、下記はどのように変更されますでしょうか?
CGAffineTransform startAngle = CGAffineTransformMakeRotation(-1.0f);
view.transform = startAngle;
CGAffineTransform endAngle = CGAffineTransformMakeRotation(1.0f);
[UIView beginAnimations: nil context: nil];
[UIView setAnimationDuration: 1.0f];
[UIView setAnimationRepeatCount: 1e100f];
[UIView setAnimationRepeatAutoreverses: YES];
view.transform = endAngle;
[UIView commitAnimations];
202:名称未設定
09/05/29 14:03:39 3CESnk220
>>198
ありがとうございます!!試行錯誤してできました。
// テスト用データ作成
NSArray *array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
// テスト用データをアーカイバーにてNSDataに変換
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
// NSPropertyListSerializationにてXML形式に変換
NSLog(@"-XML化---------------");
// Property Listの取得
NSString *error;
NSPropertyListFormat format;
NSData *xmlData;
NSString *xmlStr;
id propertyList = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
// XMLデータ化
xmlData = [NSPropertyListSerialization dataFromPropertyList:propertyList format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
xmlStr = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
NSLog(xmlStr);
// 復元テスト
NSLog(@"-復元---------------");
NSData *recoveryData = [xmlStr dataUsingEncoding:NSUTF8StringEncoding];
NSArray *arrRecovery = (NSArray*)[NSKeyedUnarchiver unarchiveObjectWithData:recoveryData];
NSLog(@"%@", [arrRecovery description]);
DBにシリアライズしたデータを格納するパターンってこんな感じなんですかね?
XMLだとデータサイズがちょっと大きいきもするので他のやり方があればお聞きしたいです。
203:名称未設定
09/05/29 14:26:20 tRjXKpLy0
>>202
それだと array -> data -> array -> xml data -> xml string
になってしまってる
property list = NSData なので、わざわざ property list に変換しなくていいよ
>id propertyList = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
-> 削除
>xmlData = [NSPropertyListSerialization dataFromPropertyList:propertyList format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
propertyList -> data
204:名称未設定
09/05/29 14:46:50 3CESnk220
>>203
>property list = NSData なので、わざわざ property list に変換しなくていいよ
そうなんですね!
でも言われた変更を加えたのですが落ちるようになってしまいました。
// テスト用データ作成
NSArray *array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
// テスト用データをアーカイバーにてNSDataに変換
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];
// NSPropertyListSerializationにてXML形式に変換
NSLog(@"-XML化---------------");
NSString *error;
NSData *xmlData;
NSString *xmlStr;
xmlData = [NSPropertyListSerialization dataFromPropertyList:data format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
xmlStr = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
NSLog(xmlStr);
// 復元テスト
NSLog(@"-復元---------------");
NSData *recoveryData = [xmlStr dataUsingEncoding:NSUTF8StringEncoding];
id arrRecovery = [NSKeyedUnarchiver unarchiveObjectWithData:recoveryData];
// ↑ここで落ちる
// -[NSCFData objectForKey:]: unrecognized selector sent to instance 0x528820
xmlStr は<data>要素にバイト文字列の用な物が5行くらい羅列されています。
たびたびすいませんが、なぜ復元で失敗しているんでしょうか?
205:名称未設定
09/05/29 16:05:49 tRjXKpLy0
見落としてた。復元のときに property List の変換が必要だから
propertyListFromData: をつかって、
XML data --> Keyed archive data
の変換をする。変換と逆の順序。
206:名称未設定
09/05/29 16:36:39 3CESnk220
>>205
ありがとう!できました。まだ分からない部分もあるけど勉強します。
// テスト用データ作成
NSArray *array = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];
// テスト用データをアーカイバーにてNSDataに変換
NSData *testData = [NSKeyedArchiver archivedDataWithRootObject:array];
// NSPropertyListSerializationにてXML形式に変換
NSLog(@"-XML形式にシリアライズ---------------");
NSString *error;
NSData *xmlData;
NSString *xmlStr;
NSPropertyListFormat format;
// データをXMLフォーマットのPropertyListに変換
xmlData = [NSPropertyListSerialization dataFromPropertyList:testData format:NSPropertyListXMLFormat_v1_0 errorDescription:&error];
// UTF-8にてNSStringにシリアライズ
xmlStr = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
NSLog(xmlStr);
// 復元テスト
NSLog(@"-復元---------------");
// XMLのシリアライズデータからNSData作成
NSData *xmlRecoveryData = [xmlStr dataUsingEncoding:NSUTF8StringEncoding];
// プロパティリストの作成
NSData *recoveryPropertyList = [NSPropertyListSerialization propertyListFromData:xmlRecoveryData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
// プロパティリストから配列を復元
NSArray *arrRecovery = (NSArray*)[NSKeyedUnarchiver unarchiveObjectWithData:recoveryPropertyList];
NSLog(@"%@", [arrRecovery description]);
207:名称未設定
09/05/29 20:28:09 GOlLipZzi
NSMutableArrayって、オブジェクトが入ってたらreleaseする前にremoveAllObjects必ず必要?
それとも、release時に自動で中のオブジェクト消してくれる?
208:名称未設定
09/05/29 20:52:04 YKCi9pQg0
3.0になってから、UICalloutViewのボタンが表示されなくなってしまったのですが
原因分かりますでしょうか?
そもそも、このAPIは使わない方がよいのでしょうか?
209:名称未設定
09/05/29 21:06:53 tRjXKpLy0
ドキュメントにのってないんだから、当然使っちゃダメ。
210:名称未設定
09/05/29 21:38:25 jobu0BoV0
>>202
>XMLだとデータサイズがちょっと大きいきもするので他のやり方があればお聞きしたいです。
配列の中身が文字列限定だけど、
-componentsJoinedByString:
-componentsSeparatedByString:
211:名称未設定
09/05/29 22:34:15 uxWuGEcO0
>>201
うーん、特に同じ内容のアニメーションをさせようとした時に、UIViewのアニメだから
重いとか感じたことはないけどなぁ。
そもそも、UIViewでやる場合はシンプルなことしかさせない(できない)からかもしれ
ないけど。
使い分けは、自分の場合は、できるならUIViewの方を使う。できない内容の場合は
CoreAnimationを使う。
あまりにも内容が複雑になって、どうしても重い場合はOpenGL使うしかないかと。
>また、CAAnimationにする場合、下記はどのように変更されますでしょうか?
このレベルなら機械的に置き換えるだけでできるよ。
ポイントは、明示的にfromValueとtoValueを設定するところで、CoreAnimationの場合の
transformはCATransform3Dを使う必要があるってこと。
この場で打ち込んでるので、タイプミスがあったら堪忍。
CGAffineTransform startAngle = CGAffineTransformMakeRotation(-1.0f);
view.transform = startAngle;
CGAffineTransform endAngle = CGAffineTransformMakeRotation(1.0f);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
animation.duration = 1.0;
animation.repeatCount = 1e100f;
animation.autoreverses = YES;
animation.fromValue = [NSValue valueWithCATransform3D:CATransform3DMakeAffineTransform(startAngle)];
animation.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeAffineTransform(endAngle)];
[view.layer addAnimation:animation forKey:@"testAnimation"];
212:名称未設定
09/05/29 22:57:23 3CESnk220
>>210
なるほど。
結局XMLの<data>がバイト文字列みたいなものになったので大ジョブそうでした。
ただDBに保存したのを取ってきたときにURLエンコードがうまくできてなくて
「 」(スペース)が「+」になっててデシリアライズできなくて泣きそうだった。。。
URLリンク(iphone-dev.ensites.net)
これを参考にURLエンコードしたらできるようになりました。
213:名称未設定
09/05/29 23:32:22 YqKcCg+TP
100ミリ秒感覚でsetNeedsDisplayを発行し、drawRect内の描画でCGContextStrokePathを繰り返すと時折チラつくのですがオフスクリーンを明示的に作成してチラつかない様にする方法って無いのでしょうか。
214:名称未設定
09/05/30 01:07:31 DscyZOP10
>>213
秒間100コマなんて描画速度は出せないよ。
オフスクリーンとかの問題じゃないと思う。
215:名称未設定
09/05/30 03:27:50 XnfNAeZC0
>>214
100msだから1/10秒間隔だとおも
216:名称未設定
09/05/30 04:53:08 E1dr8Aar0
sleepのミリSec版ってなんだっけ?
217:名称未設定
09/05/30 04:58:56 s1AL00jj0
そもそもプリエンティブOSではミリセクの制御は無理。
218:名称未設定
09/05/30 05:55:41 SlZeqEKnP
>>214
オフスクリーンとかの問題です。WIndowsやJavaで既に動いているコードなので。
>>215
ネー
リファレンスにはdrawRectはOSが描画をまとめてオフスクリーンに描画するって書いてたんですが本当かよ?って感じです。
219:名称未設定
09/05/30 06:10:51 XnfNAeZC0
>>218
> オフスクリーンとかの問題です。WIndowsやJavaで既に動いているコードなので。
あー・・・うん。 じゃあわかるよね。 それで本当にわからないのかよ?って感じです。
220:名称未設定
09/05/30 06:18:54 SlZeqEKnP
本スレで沸いてた鬱陶しいのが初心者スレにも来てんのかなー。
221:名称未設定
09/05/30 06:28:37 XnfNAeZC0
いや、「WindowsとJavaで既に動いているコードだからオフスクリーンとかの問題です」って
理論のすごさに呆れただけ。レスした俺が悪かった。そこまで書いたら普通はスルー。
222:名称未設定
09/05/30 06:48:57 SlZeqEKnP
えっとそれじゃどう理論的に正しく無いのか教えて下さい。
線や点の描画なんてどんなOSやフレームワークでも似たり寄ったりでしょう?
223:名称未設定
09/05/30 06:50:01 SlZeqEKnP
あー、やっぱり良いです。
10ミリと100ミリの違いも判らない人が混じってるみたいだからそういう人は黙っててくれればおk
224:名称未設定
09/05/30 06:50:21 zntYYg6D0
>>218
>リファレンスにはdrawRectはOSが描画をまとめてオフスクリーンに描画するって書いてたんですが本当かよ?って感じです。
ちなみにその”コード”って
オフスクリーンへの描画
オンスクリーン、オフスクリーンの切替
は自動でやるとの前提で
素直に100msごとにdrawRectさせてる形?
225:名称未設定
09/05/30 07:00:21 SlZeqEKnP
>>224
Strokepathで描画しているので常にView全体を描画しています。
複数のPathの矩形を正直に計算するより320x480ぐらいの領域だったら全部書き直した方が速いのでdrawRectで処理しています。
drawRect自体はその描画機能をタイマーで呼び出しているだけですね。
ビューの作成時と回転時にオフスクリーンを作って描画機能はそのオフスクリーンに描画、drawRectでオフスクリーンへの転送ってのをやりたいだけなのですが。
226:名称未設定
09/05/30 07:08:49 DscyZOP10
>>215
うわ、すまん。勘違いしたorz
227:名称未設定
09/05/30 07:17:40 pzmngmvY0
setNeedsDisplay はいつ描画するかの保証は無い
228:名称未設定
09/05/30 07:26:04 SlZeqEKnP
自動でダブルバッファされるから自前処理は不要という話もあるんですがCocoaで明示的に書くにはどーするんですかね?
スレリンク(mac板:442番)
スレリンク(mac板:445番)
229:名称未設定
09/05/30 07:41:02 jgS4wfwM0
>>228
他の人が普通に出来てるんだから、おまえのやり方が悪いだけ。
ダブルバッファがどうこうと持論を展開する暇があるならソース晒してみろ。
230:名称未設定
09/05/30 07:47:42 SlZeqEKnP
>>229
「他の人が普通に」ねぇ…知る限りそういう使い方ができるソフトがないから自分で作成しているんですが。
CGContextRef drawContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(drawContext);
(パスの描画なので中略。処理的には全画面でも50ミリ秒以内に十二分に収まる)
CGContextStrokePath(drawContext);
CGContextRestoreGState(drawContext);
匿名だと無責任に好き勝手言えて良いですね♪
231:名称未設定
09/05/30 07:56:00 zntYYg6D0
>230
描画じゃなくて
オフスクリーンとオンスクリーンを制御したい部分のソースってことだよ
って分かってないぽいけど、かなり大恥かいてる状態なので
そういう小馬鹿にした表現はやめたほうがいい
232:名称未設定
09/05/30 08:00:45 SlZeqEKnP
>>231
そのオフスクリーンの作成と転送方法がそもそもの質問なのですが…
初心者スレで恥も何もないでしょう。判らないから相談してるんですし。
233:名称未設定
09/05/30 08:12:52 jgS4wfwM0
>>232
態度が恥ずかしいって意味だろ。それくらい察しろ。
プログラムより先に物を教わる態度を学んでから出直せ。
234:名称未設定
09/05/30 08:19:36 SlZeqEKnP
サーセンwww
説教はどうでもいいから実例示せない素人以下は黙ってろクズがw
235:名称未設定
09/05/30 09:12:56 doed5Jub0
あっちのスレの最初の頃に一度いたな、こんな感じの奴
あんときはマルチスレッドの質問だったっけ
マルチスレッドと描画については当分答えるのひかえることにしようっと・・・。
236:名称未設定
09/05/30 09:18:16 pIfyuA7Ti
>>234
あなたは初心者じゃなさそうなので、ここじゃなく本スレで聞く方がいいと思います。
237:名称未設定
09/05/30 11:18:08 uEgo8ORM0
Nimblekit使った人いますか?
238:名称未設定
09/05/30 11:50:35 1XtuN4Hn0
>>234
貴様はまず状況を的確にかけよ。
チラつくってティアリングの事か?画面全部がチラつくのか?
実機かシミュレータか。
239:名称未設定
09/05/30 12:29:32 SlZeqEKnP
答えるつもりの無い講釈足れる阿呆が多いんでそろそろ遠慮しときます。
初心者スレだけに回答する方も初心者揃いだとは思わなかったwww
240:名称未設定
09/05/30 12:32:27 AVMlNc6i0
10回も書き込まないと分からないとは、
あなたも相当なものですね。
241:名称未設定
09/05/30 12:41:55 SlZeqEKnP
しばらくは俺も煽りに参戦させてもらうから覚悟しとけよw
242:名称未設定
09/05/30 12:56:58 jgS4wfwM0
これほど典型的なキチガいも珍しいな
243:名称未設定
09/05/30 12:59:25 SlZeqEKnP
アンチを作るとコミュニティがどうなるかを知らないほうが馬鹿なんだろうw
俺は楽しいけどなwww
244:名称未設定
09/05/30 13:01:59 NiTymq0B0
君はアンチじゃなくてただの病気だから。病院行きなさい。
245:名称未設定
09/05/30 13:03:55 6Gms48oK0
コミュニティwww
246:名称未設定
09/05/30 13:04:20 jgS4wfwM0
>>243
やめろよ。プロバイダが同じだから俺まで規制されちまう。
247:名称未設定
09/05/30 13:15:58 MdmAT6Cqi
みなさん、荒らしはスルーでお願いします。
248:名称未設定
09/05/30 14:29:40 YfPp1FMF0
>>220
本スレで沸いてた鬱陶しい教えて君ですね、分かります
249:状況(初心者質問スレで)
09/05/30 16:31:09 Oc4OgA0B0
俺さ、マンガ書いてんだけど、どうも背景上手く書けないんだよね、これってペンがおかしいんじゃね?
・・・
だってさ、タブレットじゃ書けてるのに書けないから絶対ペンのせい。
・・・
んだよ、どうして俺が書けないか言えないなら黙ってろよ。
・・・
俺を煽るなら俺も煽りに参加させてもらうぜ!アンチ作ったら怖えぇんだぞ?
----------
なんだこの流れ。
ところどころ僅かに見える問題内容から推測すると、
むしろ、機械的に100msタイマーでsetNeedDisplayをどんどん発行してることによる
問題っぽいのだが、何人か指摘してるのに完全スルーしているのは
「俺のやり方は正解で、悪いのはライブラリのせい」と答が決まっているから?
250:名称未設定
09/05/30 17:28:43 SlZeqEKnP
「機械的に100msタイマーでsetNeedDisplayをどんどん発行してることによる
問題っぽい」
はいダウト。
グダグダ言ってないでコード書けよハゲ。
251:名称未設定
09/05/30 17:38:41 pQa71Rll0
この場合コードは書くのではなく消すのが正解だな
252:名称未設定
09/05/30 17:50:11 pzmngmvY0
UIView のサブクラスを作って、以下の drawRect: を実装
NSTimeInterval interval = [NSDate timeIntervalSinceReferenceDate];
double val = sin(interval);
[[UIColor whiteColor] set];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextFillRect(context, rect);
CGRect frame = CGRectMake( 90, 190 + val*100 ,100,100);
[[UIColor blackColor] set];
CGContextStrokeRect(context, CGRectIntegral(frame));
0.1 秒毎に setNeedsDisplay を呼んだ
結果、ぜんぜんちらつかない
253:名称未設定
09/05/30 17:53:44 Oc4OgA0B0
>>251
俺もそう思うんだが、どうにもわかってないっぽい。
254:名称未設定
09/05/30 18:33:08 jgS4wfwM0
>>253
限りなく正解に近いレスが付いてるんだけどな。
叩く事にしか意識が行ってないから気づいてないんだろ。
255:名称未設定
09/05/30 18:35:05 doed5Jub0
いや、まじ相手しないほーがいいって
プロジェクトキャンセルになったらもーこないかもしんないんだし
256:名称未設定
09/05/30 19:18:58 SlZeqEKnP
>>252
いつもそんな負荷の掛からない実用性の無いコードばっかり書いてるの?
ポイントを最低60以上あるPathを10個ぐらいStrokeしてみろよ。始点と終点が欠けるからさ。
257:名称未設定
09/05/30 19:21:20 SlZeqEKnP
>>254
解決したから言えるんだが正解に近いものなんてひとつもねーよボケ。
258:名称未設定
09/05/30 19:57:07 jgS4wfwM0
パスが秒間10コマで動く素晴らしいアプリに★1つ
259:名称未設定
09/05/30 21:53:41 pzmngmvY0
>>257
じゃあ二度とここには来るなよ。
260:名称未設定
09/05/30 22:05:06 Oc4OgA0B0
もうほっときナサ~イ
261:名称未設定
09/05/31 00:54:04 jpNgFdJHi
みんな優しいなあ・・(T ^ T)
262:名称未設定
09/05/31 01:17:52 VJpkOeUT0
>>257
解決したんだ。おまえ天才かw
263:名称未設定
09/05/31 05:54:02 Eq2dFbagi
うわぁ。なんだこのながれ。
みんな、仕事でやなことでもあったの?
264:名称未設定
09/05/31 11:16:36 NXMHIrKxi
どうやって解決できたのか気になるんだが。
俺はアドバイスが全部的外れというのが真贋つかない。
265:名称未設定
09/05/31 12:04:02 mtPp5Itu0
>>264
もう放っておけよw
266:名称未設定
09/05/31 16:09:27 +NhFq/Z90
ただの負け惜しみなんだから放置でよろし
267:名称未設定
09/05/31 16:24:45 y+Zvd1Jz0
超絶初心者です。簡単すぎる質問だとは思いますが、どうしても分からないので教えてください。
プロジェクト作成->TabBarApplication->UITextfiledをそれぞれのタブ(FirstViewController,SecondViewController)に配置
という状態で,FirstViewController.mからSecondViewController.mにあるメソッドを呼び出すにはどうしたらいいでしょうか?
[オブジェクト名 メソッド名 : 引数]←言葉が間違ってたらごめんなさい
と書いて呼び出すということは分かるのですが、SecondViewControllerがどういう名前で生成されているのか分からず…。
[self nowstateedit : @"test"];
と打つことで同じクラスのは呼び出せるのですが。
とても初歩的な質問だとは思いますが、よろしくお願いします。
参考書として
詳細Objective-c2.0
基礎からのiPhoneSDK
iPhoneSDKプログラミング大全
は持っていますので、参考ページを指示していただけると助かります。
268:名称未設定
09/05/31 16:39:32 bd56HHSdP
直接呼び出すよりはSeconviViewのdelegateをFirstViewに作成するか、UIApplication経由でSecondViewのメソッドを呼び出すかどっちかだな。
楽なのは後者だが正当派なのは前者。どっちを知りたい?
269:267
09/05/31 16:44:21 y+Zvd1Jz0
>>268
素早いレスありがとうございます。
後者の「UIApplication経由でSecondViewのメソッドを呼び出す」でお願いします。
そっちのほうが,今後他の自作クラスのメソッドを呼び出す勉強にもなるような気がするので。
本当に助かります!!
270:名称未設定
09/05/31 19:55:25 FYdiRzVx0
iPhoneでコールバックって多用してもいいのでしょうか
GUIでネットワーク系のイベントを受け取って特定の
イベントを処理させたいです。
271:名称未設定
09/05/31 20:45:25 75wSOkSm0
DTSの苦労がわかるスレだな。
272:名称未設定
09/05/31 21:02:05 c4ovGixG0
>256
物量だけで言うなら、1万以上の頂点数から比べればカスみたいな話しだけどな
273:名称未設定
09/05/31 23:01:01 VJpkOeUT0
>>272
構ってやるなよ
274:名称未設定
09/06/01 12:38:48 3T/JjDrp0
>>243
どうにもならなかったな
275:名称未設定
09/06/01 19:41:23 qdPz+P6A0
≪世界的に有名なオンラインゲーム開発企業でiPhone用ゲームのプログラミング経験者募集≫
URLリンク(www.daijob.com)
>・iPhone用ゲームのプログラミング経験2年以上
ワロタ
276:名称未設定
09/06/01 20:04:11 wVuMCfP80
>>275
『C、C++ (中級レベル以上)』て。
Objective-Cを使わない気なのか。
いったいどんな情報を基にしてiPhoneアプリ開発するのにその募集要項なのやら
277:名称未設定
09/06/01 20:06:50 mf1wbFXe0
必要経験満たす人なんているんだろうか....
というか英語能力:なしの時点でもう駄目な気がするw(公式ドキュメントとDeveloper Programの英語依存度的に)
278:名称未設定
09/06/01 21:12:10 SeYnYzemi
>>275
年収MAXで500万円って安っ
279:名称未設定
09/06/01 21:23:34 9/s3TXqk0
>276
まあゲームなら最初のviewさえ作ってしまえばあとは
ほとんどC++でいける。
280:名称未設定
09/06/01 22:02:16 a7/6CuPR0
>>275
どう考えても年収350万スタートだな。
そんな条件で仕事しなきゃならないほどMac系開発者って仕事ないの?
281:名称未設定
09/06/01 22:05:02 mf1wbFXe0
むしろMac系に限らず日本はプログラマーを軽視してるから年収が低い
こき使って用済みになったら放り出して終わり的な感じ
プログラマー板に行くとその現状がいろいろと明らかに
282:名称未設定
09/06/01 22:08:07 8NjgUD3Qi
>>280
この場合Mac系じゃなくてゲーム系じゃないの?
283:名称未設定
09/06/01 23:09:06 3T/JjDrp0
>>280
お前だって仕事が無いからiPhoneアプリを作らされてるんじゃないの?
284:名称未設定
09/06/01 23:32:57 3BCoBALr0
>>275
会社の適当さが分かるなw
285:名称未設定
09/06/01 23:45:25 15TCKF9n0
やっと実機で動かせるようになったのですが、
別のアプリを動かそうとすると前のものに上書きされてしまうのだけど
これはそういうものなのですか?
AppIDを「*」にしなかったのがまずいのかな
286:280
09/06/01 23:49:36 a7/6CuPR0
>>281
俺の周りのプログラマに、年収350万なんていないわ。
>>282
知り合いのゲーム業界の人(みんなも知ってるだろう複数のタイトルに関わった人たち)は、
みんなもっと貰ってるぞ。小さいエロゲ専門の会社とかだとどうかわからんけど。
>>283
俺の場合iPhoneアプリは本業じゃない。
287:名称未設定
09/06/02 00:02:03 W1NbAVQy0
>>285
そういうものです
ホーム画面を一つのファイルフォルダに例えると、AppIDはファイル名にあたるものです
同じ名前のファイルを同じフォルダへコピーしたら元のファイルは上書きされて残らない
これと同じことが起こっているわけです
画面に表示されるアプリ名やプロジェクト名は飾りみたいなものと考えたほうがいいです
288:名称未設定
09/06/02 04:30:02 FXJvpEQQ0
100ミリセク未満の単位で処理するなんてのは、無理なんだぜ。リアルタイムOSじゃないし。
プログラマの仕事の品質が低過ぎだろう。
事務員でも慣れればミスはしなくなるのに、PGはいつまでたってもバグ入りプログラムしか出荷出来ない。
289:名称未設定
09/06/02 07:24:35 maCB0Hm7O
キーボードの入力を英字のみに制限したいのですが、可能でしょうか?
290:285
09/06/02 08:19:43 ZAJrlM6f0
>>287
超わかりやすい説明サンクスです
291:名称未設定
09/06/02 11:32:27 aSrnMMgd0
>>285
アプリは、Info.plist の CFBundleIdentifier で識別される。
Xcodeでは、以下のマクロで定義されているので、
com.yourcompany.${PRODUCT_NAME:identifier}
Target Setting=>Build=>Packaging=>Product Nameを変更。
AppStore に出すときは、ちゃんと自分のに変更してね。
292:名称未設定
09/06/02 11:35:19 aSrnMMgd0
>>287
AppIDは、アプリのグループを定義する物だから、直接は関係無いよ。
CFBundleIdentifier が、com.yourcompany.hoge なら、
AppID は、* とか com.* とか com.yourcompany.* とか com.yourcompany.hoge で
なくてはならないって話だよね?
293:名称未設定
09/06/02 14:39:44 6Y4/H/pA0
>>288
プログラマおつw
294:名称未設定
09/06/02 20:10:16 MzxjBfZG0
以下のソースをデバッガで確認してみると、cell が再利用されず、毎回、cell == nil と判定されてしまいます。
再利用させるようにするためには、どのようにすればよいでしょうか?
-----
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"RootViewCell";
RootViewCell *cell = (RootViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
UIViewController *viewController = [[[UIViewController alloc] initWithNibName:@"RootViewCell" bundle:nil] autorelease];
cell = (RootViewCell *)viewController.view;
cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"RootViewCellBG.png"]] autorelease];
}
return cell;
}
-----
*RootViewCell .xib の Identifier には「RootViewCell」が設定されています。(owner は「UIViewController」)
295:294
09/06/02 20:20:25 MzxjBfZG0
URLリンク(d.hatena.ne.jp)
ここに解答がありました。
ある程度インスタンスが作られるのは正常な動作なんですね…。
296:285
09/06/03 00:12:23 fNYIY+PN0
>>291
うーむ。
さっぱりわからないですぜ
とりあえずinfo.plistのBundle identiferに
AppIDのときいれた文字列をいれたら動いて
そこまでしかわかってないんだが。
まあきっと配信できるくらいのものが出来るようになったら(必死になって調べるだろうから)わかるだろうか。
297:名称未設定
09/06/03 00:29:04 CyfakOoL0
BundleIdentiferってのは
com.apple.safari
com.apple.iTunes
とかそんな感じ
アプリ毎に違うIDが必要なのは分かるでしょ?
com.apple.*で証明書発行しとけばどのアプリも同じ証明書でいけるよってこと
俺自分で登録してないから間違ってたらごめんだけど
298:名称未設定
09/06/03 00:37:31 ueFMXoGH0
>>297
「com.apple.*」じゃなくて「*」だけじゃない?
299:名称未設定
09/06/03 08:24:29 S8ZraQ890
*までの頭が bundle idと同じなならok。push使う時は*はng。
300:名称未設定
09/06/04 03:14:36 0ptb6Ltn0
UITableViewについて教えて下さい。
UITableViewをaddSubViewした時に実行されるメソッドは何になりますでしょうか。
301:名称未設定
09/06/04 15:11:34 7W7H+Utli
addSubview
302:名称未設定
09/06/04 15:39:56 x3d3rC6Pi
>>301
違ぇねぇw
303:名称未設定
09/06/04 19:21:15 OsTqhy2c0
TableView で setEditing したときに、配置したオブジェクトが右へスライドしますが
BackgroundView もいっしょにスライドするようにできるのでしょうか?
304:303
09/06/04 19:22:46 OsTqhy2c0
TableViewCell の BackgroundView のことです。
305:名称未設定
09/06/04 19:34:16 X5X6UBZT0
>>304
Backgroundのかわりに最背面にImageViewを配置してみれば?
306:303
09/06/05 12:11:55 EyGjwVqk0
>>305
Cell選択時は、
tableView:willSelectRowAtIndexPath:
tableView:willDeselectRowAtIndexPath:
あたりで ImageView を切り替えるということでしょうか?
307:303
09/06/05 16:00:15 EyGjwVqk0
試してみましたが、>>306 だとタイミングが合わないのでダメっぽいですね…。
308:名称未設定
09/06/05 16:24:50 saB4prnc0
backgroundView を登録するのじゃなくて、cell 上にある諸々の view の一つとして、
一番背後に imageView を配置するということだと思う。
309:303
09/06/05 16:56:31 EyGjwVqk0
>>308
はい、そのようにすると Cell Selection Style や、selectedBackgroundView が使えなくなってしまうため
>>306 のようにしたらどうだろうかと思ったわけです。
ですが、willSelectRowAtIndexPath だと、指をはなしたときにイベントが起きるため
オリジナルの動作とは違うものになってしまいました。
310:名称未設定
09/06/05 17:02:07 DGSH1hxq0
>>309
ImageViewがイベントをトラップしてるんじゃなかろうか。スルーしてみれば?
311:303
09/06/05 19:03:58 EyGjwVqk0
自己解決しました。
>>309
残念ながらトラップはしていませんでした。
結局、backgroundView、selectedBackgroundView は生かしつつ
スライドされるときだけ、左にはみ出して配置した imageView を表示させるようにしました。
*imageView は「sImage」として、hidden = YES にして配置
-----
UITableViewCell
- (void)willTransitionToState:(UITableViewCellStateMask)state {
[super willTransitionToState:state];
if (state == UITableViewCellStateEditingMask) {
sImage.hidden = NO;
}
}
- (void)didTransitionToState:(UITableViewCellStateMask)state {
[super didTransitionToState:state];
if (state == UITableViewCellStateDefaultMask) {
sImage.hidden = YES;
}
}
-----
312:名称未設定
09/06/06 09:09:35 7RWY5kUF0
TableViewってさ、選択してもスクロールすると選択解除されちゃうんだけど、
スクロールしても選択解除されない方法って無いかな?
313:312
09/06/06 12:51:24 7RWY5kUF0
sdk 3.0でコンパイルしたらスクロールしても解除されなくなったぜ・・・
314:名称未設定
09/06/06 13:21:04 t4lhN40B0
一応レスしとくとHIGに書いてある
「使用方法と動作」で述べたように、行項目が選択をサポートする場合、Table Viewはユーザのタップに応えて自動的に行をハイライトします。
この短時間のハイライトは、ユーザが意図した行をタップできたことをユーザに示し、ユーザの選択が処理されていることをユーザに知らせるフィードバック機構です。
リスト内の現在の選択を示す目的で、ハイライトしたままの状態には決してするべきではありません。
代わりにチェックマークを使用します(「Table Viewの要素」で説明します)。
315:名称未設定
09/06/06 14:00:19 7RWY5kUF0
ありがとう。
なんかアップルのそういう押しつけはちょっとうざいな・・・好きにさせろよって思う。
インデックス表示しちゃってるから、チェック入れても見えないかも・・・
316:名称未設定
09/06/06 14:24:16 7JwLSKfY0
すいません、xibファイルをなるべく使わない方がパフォーマンスがいいってどこかで見かけた気がするんですが、実際のところどうなのでしょう?なにか検証記事等あるのでしょうか?
317:名称未設定
09/06/06 14:27:05 0LOgdA3Oi
>>316
自分で検証してみるって発想はないの?
318:名称未設定
09/06/06 15:17:27 Ds5afP830
>>316
xibファイルの中身は最初に展開されてUIを構築するだけだからあんま変わらんような。
使わないとなると、本プログラム中で動的に途中途中で作成してくだけの違いっしょ。
>>315
頼むから標準ユーザーインターフェースの統一に関することを「押しつけ」とか
言わんでくれよ… 独自インターフェース使いたいなら没入型にして
自分で独特のインターフェース群を組めばいいんだからさ。
なんで”あっち”があんななのかが垣間見えて胃が痛い。
319:名称未設定
09/06/06 15:33:18 7RWY5kUF0
すまんすまんw
でも3.0で仕様が変わってるってことは、選択保持の要望が多かったのかもしれんな。
320:名称未設定
09/06/06 18:32:53 emzt0YcP0
いやこれに関してはAppleの言う事も理解できる。
同じようなUIなのにどうさがAppにやってまちまちだとユーザは混乱すると思う。
321:名称未設定
09/06/06 23:51:09 XgHqYDEL0
でも押しつけが有るのでは、アプリ作成が公開されてる意味は無いけどな。
そしてアポー自身が画期的なアプリを造る時だけ、押しつけ外の隠しUIが使われる罠。
アポーの手のひらでしか動けないのは窮屈。
何の疑問も感じないのは外の世界を知らずに洗脳されてる信者の証。
322:名称未設定
09/06/07 00:08:39 mGShGs1Qi
独自UIを作る能力もなく、与えられた物を組み合わせることしか出来ない豚が何か喚いております。
323:名称未設定
09/06/07 00:10:05 tzL1QX4s0
隠しUIwww
324:名称未設定
09/06/07 00:27:18 V1pwfvdM0
コテコテのドザ思考のヤツが、iPhone アプリの開発に手を出すのが
そもそもの間違い。
ドザが言い出す文句には、もうウンザリ。
325:名称未設定
09/06/07 00:30:38 vHlPD1xN0
UIの話は置いておくとしても
>アポーの手のひらでしか動けないのは窮屈
これは多くが思ってる事じゃない?
326:名称未設定
09/06/07 00:39:07 tzL1QX4s0
>>325
環境に文句を言う奴は無能
327:名称未設定
09/06/07 00:46:16 86AOoHKR0
>>321
オブジェクト指向もオーバーライドの概念もわからない子がなんで
こんなスレ覗いてるのかがわからない。ホント。隠しUIねぇ…
328:名称未設定
09/06/07 00:53:17 TUnZIaa00
Linuxから来た漏れは無制限にすると
何が起こるか知ってる。
329:名称未設定
09/06/07 00:53:30 86AOoHKR0
>>325
共通インターフェースを「使うなら」ユーザーの利便性のために使い勝手を他と同じにしなさい。
自分で独自のものを作るのならその限りではない。
この話のどこに「アポーの手のひら」とか出てくるのやら。
そもそもの話が「Appleの用意したライブラリを使用するとき」って前提なのに
なにに反抗して”支配からの卒業”wしようとしてんだ?
中学校の校舎のガラス割って廻るのはほほえましいが、
社会人が会社のガラス割って廻るのはそりゃ単に精神病院行きだw
330:名称未設定
09/06/07 00:53:34 W4XFPLpU0
普通にUI作ればいいじゃんっていうね
331:名称未設定
09/06/07 01:00:34 ibjxvun70
泣き出して鼻水巻散らかされても困るので、許してやろうぜw
332:名称未設定
09/06/07 01:08:35 c4j2bQioi
アポーの手のひらが嫌なら、ハードから自分で作ってしまえばいいじゃない
333:名称未設定
09/06/07 01:22:56 vHlPD1xN0
>>329
俺にUIの話振られても困るw
iPhoneOS含め環境の話。
>>326
至言です。自戒します。
334:名称未設定
09/06/07 01:24:59 wSlzYNc/0
>332
techcrunchの連中が作ってたみたいにな。
335:名称未設定
09/06/07 03:08:01 CNwzaTgb0
必然性のないオナニーインターフェースを再発明することでしか
開発者としての意義を見いだせない可哀想な人なんだよ