トップページ⇒mac
1001コメント350KB

[SDK]iPhoneアプリ開発初心者質問箱34[touch][iPad]

レス数が1000を超えています。これ以上書き込みはできません。
0001名称未設定2013/08/19(月) NY:AN:NY.ANID:ykyhR6cZ0
iPhone, iPod touch用アプリケーションの開発を始めたばかりの初心者向け質問スレ。

■質問する前に■
1. 質問は日本語もしくはObjective-Cで
 質問に質問で返されても逆切れしない。それは質問の仕方が悪いってことだよ。
2. どういう内容であれレスをもらったら報告とお礼の言葉を忘れずに。
 回答者は自分の時間を使って親切で回答してくれています。
3. 回答者は自分も初心者であった事を忘れずに。
4. マルチポスト(複数のスレに同じ質問を書込むこと)は厳禁!
5. 質問は可能な限り具体的に。
 ただ「エラーが出ます」ではエスパーかスタンド使いでなければ答えられません。
 エラー内容をちゃんと書きましょう。
6. わからない部分のコードをコピペすると手っ取り早いです。
7. このスレは無料プログラミング教室ではありません。
 「○○の仕方を教えてください」という質問はなるべく避けてください。
 「自分で調べたけどわからなかった事」を質問するというスタンスを忘れずに。
8. バグを安易にOSや開発環境のせいにしない。
 自分の知識の無さを棚に上げて人のせいにするなんて百年早い。

■関連スレ
iOSアプリ 個人開発者の雑談スレ13
http://anago.2ch.net/test/read.cgi/mac/1369912531/

iPhone iPad iOSプログラミング Part1
http://toro.2ch.net/test/read.cgi/tech/1314086681/

【脱獄】iPhoneのJailbreakアプリ開発スレ
http://anago.2ch.net/test/read.cgi/mac/1337945208/

※前スレ
[SDK]iPhoneアプリ開発初心者質問箱33[touch][iPad]
http://anago.2ch.net/test/read.cgi/mac/1370485786/
0951名称未設定2013/10/16(水) 03:00:41.90ID:SXEuB76i0
Bの-viewWillAppearでreloadDataなんじゃないの?
解決したなら、まっいいか。
0952名称未設定2013/10/16(水) 11:32:55.89ID:QesErf1sP
>>950
多分contextをAppDegateで共有するようにしたんだと思うけど、もう少し質問して別のアプローチを学んだ方がいいと思うぞ。
解決したなら、いいんだけどさ。
0953名称未設定2013/10/16(水) 14:21:55.06ID:dfTj85nq0
>>951
>>952
ありがとうございます。NSUserDefaultsでの保存もそうなのですが
親子構造を持たない画面遷移の場合、「-viewWillAppearでreloadData」だけによる解決以前の
もっと全体の問題のようですね…

自分はウェブプログラミングからこの世界に入りまして
ウェブでDBを扱う時は、各画面その都度DBにつないでデータを取り出し表示させればいいので
なかなかiOSの考え方を理解するのに戸惑っています。
0954名称未設定2013/10/16(水) 22:33:26.44ID:W1V/N/R40
UICollectionView の reloadData って非同期で呼ばれてるっぽいけど
reloadData の完了を待って処理したい場合どうすればいいですか?

TableView の場合だとこんな感じでいけるっぽいが CollectionView だとうまくいかなかった。
http://qiita.com/corocorococoro/items/1c80681cd7e1fddc3ba3
0955名称未設定2013/10/16(水) 22:47:52.38ID:e63nOU1VP
たぶん作り方というかアプリ設計が間違っている
0956名称未設定2013/10/16(水) 22:56:50.34ID:wMHElLcY0
>>954
同じ質問がここにもあるが、
http://stackoverflow.com/questions/14020027/how-do-i-know-that-the-uicollectionview-has-been-loaded-completely
reloadの完了でなにをしたいの?って言われてるぞ。
09579542013/10/17(木) 00:11:22.43ID:nV5ptTFL0
>>956

すべてのセルが描画されたタイミングで各セル内に隠してた view を順番に表示させるということを
やりたいんです。
サッカーの観客がやるウェーブみたいに右から左に向かって順に表示されていくようなイメージです。

なので各セルを描画中するタイミングではなく、reloadData が完了して見えてるセルがすべて
描画されたタイミングを起点にしてアニメーションを設定する必要があるのです。
0958名称未設定2013/10/17(木) 00:45:07.17ID:vBdk41fWi
表示が終わったらindexPathsForVisibleItems使って隠れた内容を順次表示すればいいじゃん。
0959名称未設定2013/10/17(木) 01:59:07.37ID:cRQ9KSHv0
セルによって描画にかかる時間がまちまちだと。例えば0.5秒とか1秒とか。

セルのcontentViewの描画が表示個数分終わったかチェックするしかないかな。
reloadDataから描画完了までスクロールをロックすれば可能だろう。
描画中にスクロールされた場合は判別出来ない。
0960名称未設定2013/10/17(木) 03:15:29.12ID:8aaT70woi
>>953
実はCoreDataが特殊なんだけどな
09619542013/10/17(木) 09:54:44.73ID:nV5ptTFL0
>>958
"表示が終わった"タイミングを取得する方法ってありますか?

>>959
collectionView:cellForItemAtIndexPath: 内で処理済みセル数をチェックするってことですかね?
だとするとあまりいけてないので冒頭に質問した reloadData の完了を待つという方法を採用
したいのです。
0962名称未設定2013/10/17(木) 16:12:43.94ID:eNIFJn0D0
>>961
reloadDataってデータソースのデータが大幅に変わったからそれに合わせて画面を書き換えよってのじゃないの
reloadDataはアプリ側から呼ぶもんじゃないの?だったらrealodDataを呼んだ直後でいいような
reloadDataが予測不能で呼ばれるようだったら、UICollectionViewのサブクラスでオーバライドして[super reloadData]の後でやりゃいいだろう

というのは、単に「reloadDataの完了を待つ」というのだけの話しで、本当にやりたいこととはズレているような
0963名称未設定2013/10/17(木) 16:13:52.73ID:bPc/QK39P
>>961
>>959で問題ないだろ。何が「いけてない」の?
0964名称未設定2013/10/17(木) 17:10:45.65ID:cRQ9KSHv0
>>961
>collectionView:cellForItemAtIndexPath: 内で処理済みセル数をチェックする

違う、collectionView:cellForItemAtIndexPath:でわかるのは各セルの描画の「開始」だ。

collectionView:cellForItemAtIndexPath:でビューをcontentViewにaddSubviewするだろ。
その各ビューのdrawRect:の末尾からViewControllerにコールバックする仕組みを作る。
そのコールバック内でカウントして、[collectionView indexPathsForVisibleItems] count]と照合するんだよ。
原始的だろ? だがこれしか各セルの「contentViewの描画完了」を取得する方法が無い。

ところで各contentは描画に最大でどれくらい時間がかかる?
全部で0.1秒とかのレベルなら単純にperform…afterDelayでやればいいと思うが。

>>962
それもやったが駄目だった。
[super reloadData]から先が非同期なので、描画終了はどうやってもわからない。
さらにおそらくreloadData中でもscroll可能と思われる。
0965名称未設定2013/10/17(木) 18:40:52.99ID:jGC1h1KxP
速くスクロールすると描画完了しない時もあるのでは?
0966名称未設定2013/10/17(木) 19:04:19.22ID:cRQ9KSHv0
>>965
reloadDataの前にscrollEnabled = NO しなきゃだめだろね。
そのときに現在の表示数を取得しておくと。

しかしおそらく描画より画像の準備・取得に時間がかかってると思うんだがね。
0967名称未設定2013/10/17(木) 23:30:10.12ID:cRQ9KSHv0
>>961
これやってみ。
[collectionView performBatchUpdates:^(void){ [_collectionView reloadData]; }
completion:^(BOOL finished){ NSLog(@"finished"); }];
09689542013/10/17(木) 23:55:12.66ID:nV5ptTFL0
>>962
ID:cRQ9KSHv0 さんも言われているように、reloadData は非同期処理なんですよね。

>>963
やりたいことはできるんですが、一瞬とはいえスクロールを固定しないとうまく動かないのには
ちょっと違和感を感じました。自分がユーザーだったら「このアプリいけてねえ」って言うかなと。

>>964
現状は perform…afterDelay で試してます。概ねうまく動くのですが以下のようなケースでうまく
動きません。

画面上に並び順を変更するための SegmentedControl があるのですが、これを素早く押して
ウエーブ中にソートを切り替えるようなことをやると描画が崩れてしまいます。

ウエーブ中はユーザーからのアクセスを制限する必要があるかもしれないですが、できる限り
それは避けたいと思ってます。
0969名称未設定2013/10/18(金) 00:15:06.08ID:qMonEr5n0
>>968
reloadData関係無くないか?
SegmentedControl からのトリガーで、もしウェーブ中ならそれをキャンセルして、
始めからウェーブし直すってことだろ?
描画が崩れるってのはどんなふうに?
09709542013/10/18(金) 00:16:51.89ID:6nwwrgLx0
>>967
performBatchUpdates に渡してる block 内で reloadData しているものの
collectionView:cellForItemAtIndexPath: が呼ばれない現象に遭遇しています。

ただ、これを使えば reloadData の完了を待ってアニメーション処理を行えそうです。
ありがぞうございました!
09719542013/10/18(金) 00:21:46.99ID:6nwwrgLx0
>>969
隠してたビューが消えずに残ったままになります。
おっしゃる通り reloadData 関係ないです。アニメーションの制御に問題がありそうです。
0972名称未設定2013/10/18(金) 12:38:02.01ID:5GUmOYpn0
すみません、ボタンのサイズにタイトル文字の大きさをあわせたいのですが、ググってでてきた

btnA = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnA setTitle:@"a" forState:UIControlStateNormal];
0973名称未設定2013/10/18(金) 12:44:09.50ID:5GUmOYpn0
>>972 途中で書き込みました。

btnA = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnA setTitle:@"a" forState:UIControlStateNormal];
btnA.frame = CGRectMake(margin, firstrowTopY, btnwidth, btnheight);
btnA.titleLabel.adjustsFontSizeToFitWidth = YES;
[self.view addSubview:btnA];

としてみたんですけどなりませんでした。どうすればいいでしょうか。
0974名称未設定2013/10/18(金) 15:24:42.72ID:Y1NRMlzJ0
>>973
ajustsFontSizeToFitWidthは収まりきれない時の動作なんで、フォントサイズをでっかくしといてみろ。
0975名称未設定2013/10/18(金) 15:40:11.84ID:evDahClw0
MKMapViewにおいて、自分の位置情報を意図的に変更するとは可能なのでしょうか?
MKMapViewのuserLocationを自分で用意したCCLocationで上書きしようにもreadonlyになっててできません……。
何かいい方法があったら教えてください囧rz
0976名称未設定2013/10/18(金) 16:45:43.94ID:lnTGh2Br0
Objecitve-Cのコードの中にHTMLコードを入れて動かすってことは可能ですか?
0977恐縮です2013/10/18(金) 17:00:47.60ID:N8FssH9r0
初心者です。bluetooth関連のアプリを作っています。少し卑怯な方法でもバックグラウンドで通信を継続したいと思っています。
ttp://addsict.hatenablog.com/entry/2013/01/05/002049
を参考にコードを書きたいと思っていますがうまくいきません。
まずどこにそのコードを書くべきかがわかっていません。
さらに自分がコードを書くべき場所と思っているappDekegateのapplicationDidBecomeActive
にそのままコピペすると//〜構造体の作成 の箇所でUse of undeclared identifier のエラー表示が続出してしまいます。
どなたか識者のかたこの情けない度素人にどのようにすれば良いか、または私がどこを理解していないかご指南いただけませんでしょうか?
0978名称未設定2013/10/18(金) 18:07:42.76ID:ZdmhZzq10
In-App Purchaseの開発しようとしてますが、何故かプロダクトが登録できません
(Manage In-App PurchasesのCreate NewにFree Subscriptionしかない)
「iPhone&Androidアプリ内課金プログラミング完全ガイド」という本によると、ここでConsumableとか選べるはずなんですが…
これでは開発できないかと思うのですが、どうすればいいのでしょうか?
0979名称未設定2013/10/18(金) 18:23:42.21ID:xADA/KMz0
>>976
HTMLは表示するものであって動かすものではないよ。
0980名称未設定2013/10/18(金) 18:34:13.91ID:u3lzPnIj0
>>975
デバッグ用ならできた気がする(シミュレータだけかも)けど、最終的なアプリでは無理。
自分でそれっぽいピンを立てるしかないけど、下手にやるとリジェクト対象かもね。
0981名称未設定2013/10/18(金) 18:39:15.13ID:GwXkuTPbi
>>978
なんだかわからないけど本家貼っておきますね。
https://developer.apple.com/jp/devcenter/ios/library/documentation/StoreKitGuide.pdf
0982名称未設定2013/10/18(金) 18:44:43.47ID:lnTGh2Br0
>>979
でもホーム画面をHTMLでカスタマイズできますよ
0983名称未設定2013/10/18(金) 18:46:58.96ID:j/QX2SNQ0
>>977
卑怯者で技術もないなら開発やめれば?
0984名称未設定2013/10/18(金) 19:01:34.40ID:fXdx7sI/0
>>977
必要なヘッダーファイルをimportしたらいいよ。
どれが必要か、どうすればいいかはぐぐってくれ。
0985名称未設定2013/10/18(金) 19:01:46.43ID:Vex2ZE2c0
>>980
微妙に残念だけど、ありがとう。
ついでに知っていたら教えて欲しいんですが、GPSの位置情報を偽装する系のアプリはどんな仕組みなんでしょう?
0986名称未設定2013/10/18(金) 19:04:57.80ID:fXdx7sI/0
>>976
それができるとして何をしたいか書くといいよ。
0987名称未設定2013/10/18(金) 19:31:51.90ID:lnTGh2Br0
>>979
>>986
レスありがとうございます。

やりたいことは、常に壁紙背景をWebページ(HTML)として表示するということです。
ホーム画面あるじゃないですか。
JailBreakしたらいろいろいじれるんですが、
WinterBoardというiPhoneの見た目を変えるアプリがありまして、
それで壁紙などをカスタマイズ出来るんですけど、
テーマ(HTML)を反映させるためにリスプリング(プチ再起動)しなければならないんですね。
リスプリングっていうのが1分半〜2分ぐらいかかりまして、
いちいち壁紙を変えるのに時間かかってたら面倒くさいじゃないですか。
そこで、常にHTML表示を有効にしておけばいいと考えた次第です。
Objective-Cの中にHTMLのコード入れて操作出来ればいいと思ったんですけど、
他の方法としてとりあえずObjective-Cのコードでswitch文書いて、
HTML1、HTML2、・・・を参照するということは可能でしょうか?
ファイルを参照すればいいだけの話だと思いますが、
こういう方法であってますでしょうか?
現在、プライベートメソッドとサンプルの Tweak(脱獄アプリ)のコードを参考にして、
「SBFWallpaperView」というプロパティのアルファ値を0.0fにすることができました。
さらに充電されているかというBOOL値を強制的に常にYESにすることで、
充電されていないときにも常にバッテリーをロックスクリーンに表示することができました。
こんな感じです。
http://uproda.2ch-library.com/718527saA/lib718527.png
自分がやりたいことは、ホーム画面の壁紙を常にWeb表示(HTML)にしたいということです。
この場合、「WallPaper」に関連したメソッドをいじるという発想であっているでしょうか?
・ファイルの参照(HTML)
・どのプライベートメソッドをいじればいいのか
この二点どうかご教示よろしくお願いします。
0988名称未設定2013/10/18(金) 19:35:37.89ID:CoKVhdx10
なんで脱獄厨が開発者スレに入ってきてるんだ?
0989名称未設定2013/10/18(金) 19:38:11.86ID:v4qQI3So0
>>987
脱獄の事は全くわからんけど、UIWebViewというクラスのリファレンス観ればいいんでねーの。
変数に突っ込んだHTML文字列を表示させたり、ローカルに保存したHTMLファイルを表示することは簡単に出来るよ。
0990名称未設定2013/10/18(金) 19:38:15.96ID:ppOvdm2X0
>>977
iOS7でやればもっと簡単にできそうだけど。
0991名称未設定2013/10/18(金) 19:38:17.54ID:lnTGh2Br0
>>988
開発者ですけど。
0992名称未設定2013/10/18(金) 19:39:29.03ID:GV9VSzoK0
>>991
脱獄アプリを作ろうとしてんの?
Undocumentedを聞いてもしょうがないなと思うのだが。そういうのは自力でなんとかするもんだろう
0993名称未設定2013/10/18(金) 19:42:13.81ID:lnTGh2Br0
>>989
>変数に突っ込んだHTML文字列を表示させたり、ローカルに保存したHTMLファイルを表示することは簡単に出来るよ。
なるほど!
そういうことは普通のAPIでも出来るというわけですね。
0994名称未設定2013/10/18(金) 19:43:49.08ID:lnTGh2Br0
>>989
ありがとうございます。

もっかい調べてやってみます。
0995名称未設定2013/10/18(金) 19:48:17.66ID:fXdx7sI/0
>>987
ホーム画面にHTMLを表示させることは普通はできないよ。
脱獄アプリの話だったら他いったほうがいいかな。
0996恐縮です2013/10/18(金) 20:26:14.82ID:N8FssH9r0
>>983
お返事ありがとうございます。確かにその通りですね。今回は個人的利用を目的にしているのでどんな技術を利用しても構わないというところがあります。しかし何分にも素人なので行き詰まってしまいました。

>>984
ありがとうございます。大変大きなヒントをもらえた気がします。精進いたします!

>>990
ありがとうございます。ほほぅiOS7にもなにか隠れた可能性がありそうですね。研究してみます!
0997名称未設定2013/10/18(金) 20:41:41.23ID:glWT8DqW0
>>991
脱獄厨は開発者じゃないから。
0998名称未設定2013/10/18(金) 20:58:32.29ID:lnTGh2Br0
>>997
ちょっと言ってる意味わかんないですねー。
Appleに開発者登録してアプリもリリースしてるし、
Cydia Storeにも脱獄アプリリリースしてるんで、
入獄と脱獄両方の開発者なんですよ。
ご理解いただけたでしょうか。
0999名称未設定2013/10/18(金) 20:59:26.54ID:lnTGh2Br0
>>999なら入獄アプリ界でトップとります
1000名称未設定2013/10/18(金) 21:00:00.01ID:lnTGh2Br0
>>1000ならさらに脱獄アプリ界でもてっぺんとります
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。