月別アーカイブ: 2015年7月

Objective-Cでアチーブメント

iPhoneアプリに達成記録、Achievement(アチーブメント)を実装しようとしたが意外と情報がなかったので備忘録。

コチラiTunes Connect: Game Center の Achievement を設定する | siro:chroを参考に、itunes connectでAchievementを作ってから、

Game Centerプログラミングガイド – Apple Developer
詳解iOS5プログラミング – 沼田哲史 – Google ブックス
上記ページを参考に下記のようなコードを書いてみた。

すると、8行目で黄色三角がでて、
‘reportAchievementWithCompletionHandler:’ is deprecated: first deprecated in ios7.0 – Use +reportAchivements:withCompletionHandler:
と、ios7以降では推奨されない的なことを言われた。

よくわからないが、色々と調べるとこちらのサイトに行き着いた。
[self Achievements:achievement];

そしてコードを書きなおしてみた。

これでエラーは消えた。

sendAchievementメソッドの中でif文を増やしていけば色々アチーブメントを追加できるとおもう。
しかし、点数の低いアチーブメントが毎回送られてしまう気がするが大丈夫なのかな?(^_^;)

ボタンを押した時に画像が変わるようにする。

xcodeには元々デフォルトのボタンが有り、色をつけたり、ある程度形を変えたり、画像を設定することが出来る。

しかし、ゲーム風やアナログ風のボタンを表示したい時もある。

ひょっとしたらxcodeの基本設定でなんとかなるものなのかもしれないけれど、よく判らんので自分なりにやってみた。

まずは、普通状態と押した時の状態のボタンの画像を用意する。
ボタンを押した時に画像が変わるようにする。普通
ボタンを押した時に画像が変わるようにする。おした時

これらをナビゲータエリアにドラッグ・アンド・ドロップで入れる。
ボタンを押した時に画像が変わるようにする。
アラートが出るのでCopy items if neededのチェックを確認してフィニッシュ。

右下のMedia Libraryに表示されるようになります。
ボタンを押した時に画像が変わるようにする。

まず、ストーリーボードで普通状態のボタンを表示させるが、何もない状態でいきなり画像を置くと画面いっぱい最大サイズで表示されてしまうので、先にimage Viewを配置します。

さらにそのimage viewも何もない状態のストーリーボードに入れると、全画面のimage Viewになってしまうので先にラベル等を一つ置いておくと良い。
ボタンを押した時に画像が変わるようにする。

ボタンを押した時に画像が変わるようにする。

配置するとこんな感じ。
ボタンを押した時に画像が変わるようにする。

UIImageViewは右のサイズインスペクタで希望のサイズにしておき、そこに右下のメディアライブラリーから普通状態の画像を入れるとイメージビューのサイズに合わせてボタンが表示される。
ボタンを押した時に画像が変わるようにする。

ボタンの画像に重なるようにUIButtonを配置してサイズを調整します。
ボタンを押した時に画像が変わるようにする。

ボタンを押した時に画像が変わるようにする。

ボタンの画像はアウトレット接続、UIButtonは、「touch Down」、「touch Up Inside」、「touch Up Outside」の三種類でUIButton接続します。
ボタンを押した時に画像が変わるようにする。

これはボタンを押した瞬間に押した状態の画像に変えて、ボタンから離した瞬間に元の状態の画像に戻すためです。
またこれだけでは、押した状態でスライドさせると押した状態のまま画像が変わらずに残ってしまうことを防ぐため、touch Up Outsideも設定します。

完成のコードがコチラです。

これで、押した瞬間に画像が変わって離すと元に戻るボタンが出来るはずです。

もっと簡単な方法あるで、という方居られましたら教えて下さい。(−人−)

ボタンを押した時に画像が変わるようにする。

追記7/22
よくよく考えて見ればボタンと画像を切り離す必要はなくボタンのアウトレット接続で画像を変えればよかったんだなと気付いた。
ま、初心者ゆえの過ちかな。(^_^;)

複数のアラートビューで引っかかった。

UIAlertViewの表示 | iPhoneアプリ備忘録でアラートビューについて書いた。

この時はひとつの画面でひとつのアラートだったのでよかったが、複数のアラートを使い分けるときに困った。
アラートを表示するのは良いが、それを受けるほうが、どのアラートから来たか知らせる方法がよくわからなかった。

参考にさせて頂いたサイト。
複数のUIAlertViewでdelegateを使い分ける – しゃの

とりあえず、tagを使うらしい。

アラートを作った時の変数のタグが、デリゲーションメソッドのタグに引き継がれるのでそれで判別するようです。

Objective-CでLine投稿

アプリからLineに投稿しましょう。

参考にさせて頂いたサイト。
Lineに投稿する | iPhoneアプリ練習帳

[self line]
で呼び出せばLineアプリに切り替わります。

Objective-CでFacebook投稿

アプリからフェイスブックに投稿しましょう。

Social Frameworkを使います。
ソーシャルフレームワークを追加してくださいね。

[self facebook]
で呼び出せば投稿ダイアログが出ます。
連動で投稿できるのはURLだけのようですネ。

Objective-CでTwitter投稿

アプリからツイッターに投稿しましょう。

Social Frameworkを使います。
ソーシャルフレームワークを追加してくださいね。

[self twitter]
で呼び出せば投稿ダイアログが出ます。

UIButtonを一時的に無効にしたりする。

今回は自分の素人具合、初心者であることを痛感しました。(;´∀`)

前回、UISegmentedControlを使ってゲームのLevel設定をしたのですが、
ゲーム中もUISegmentedControlがアクティブのままで途中で切り替えれたり?訳わからんことになって困ってしまった。

UISegmentedControlを一時的に消したり、止めたり出来れば良いのですがやり方がわかりません。
IBActionで接続したボタン等をプログラムでいじるにはどうすればよいのか…。

散々悩んだ挙句、同じくiPhoneアプリを作っている友人に聞いた所、
「ボタンのenabledをNOとかにしてもいいし」とのこと。

enabledで検索、、、、、

、、、、、、

もしかして、UIButtonのたぐいもoutLet接続してよいのか?

そーです。
基本的に書籍かネットで調べて独学でやってたもんで、
ビュー関係はoutlet接続、
ボタン関係はaction接続と完全に思い込んでました。

こころのどこかで、なんで毎度接続方式を選択せにゃならんのだろう〜?とは思ってたんですけどね。

で、あらためて、ストーリーボードのUISegmentedControlから右クリックでViewControllerにひっぱってoutlet接続!!

ゲームをスタートしたタイミングのメソッドで

ゲーム終了のタイミングで

これでプレイ中はUISegmentedControlは薄消しになって入力を受け付けなくなりました。\(^o^)/

やはり思い込みは怖いなって話でした。

UISegmentedControl

UISegmentedControlは数個の選択肢から排他的に選択する場合に有効だそうです。

参考にさせて頂いたサイト。
Objective-C Segmented(セグメント) – iscene ページ!

ゲームのLevel、難易度に使用しました。

ボタンを選択すると、選択した番号を持ってaction接続したメソッドへ飛びます。
そこでswitch文でそれぞれにあった動作をさせます。

UIAlertViewの表示

UIAlertViewで検索をかけると、iOS8からUIAlertViewは推奨されなくなりUIAlertControllerになるという記事ばかりひっかかった。

特にSWIFTではそうなのらしい。

とは言え、こっちはまだObjective-cで頑張ってるところだ。

参考にさせて頂いたサイト。
Objective-C AlertView – iscene ページ!

まだデリゲートはよくわかってないが、アラートビューにはアラートビューデリゲートを使うらしい。
アラートを出す書式は出すタイミングで記述してもよいが、別のメソッドにしてみた。

[self alertHyouji];で呼び出せるはず。

それとも他のメソッドからでも[alart show];で呼び出せるのかな?

Implicit conversion loses integer precision: ‘NSUInteger’ (aka ‘unsigned long’) to ‘int’ っていうエラー

前回の記事のNSUserDefaultsを試している時に
データの取り出しで

と書くと黄色三角で

Implicit conversion loses integer precision: ‘NSUInteger’ (aka ‘unsigned long’) to ‘int’

とエラー表示された。
動かなくはないけどなんか違うよって言われてるみたいだ。

調べてみたところ参考にさせて頂いたサイト。
エラーをやっつけました。│MKProject for iOS
NSInteger型とint型はちょっと違うよって事らしい。

(int)をつけるとエラーは消えた。

先人の記事が有難いです。(−人−)