2012年12月27日木曜日

[iOS]iPhone、iPadの画面サイズ、フレームサイズを取得する


iOSの画面サイズは取得にくい、特に特にステータスバーやツールバーの存在がやっかい。

//現在のビューのサイズ、ツールバーやステータスバーのサイズは引かれる
//iPhone4でステータスバー、ナビゲーションバー、ステータスバーがあるとき、heightは480-20-44-44になる
self.view.frame.size.width
self.view.frame.size.height

//現在の端末のスクリーンサイズ
//iPhone4ではheight480、iPhone5ではheight568になる
[[UIScreen mainScreen] bounds].size.width
[[UIScreen mainScreen] bounds].size.height

//現在の端末のスクリーンサイズでステータスバー領域を含む
//iPhone4ではheight460、iPhone5ではheight548になる
[[UIScreen mainScreen] mainScreen].size.width
[[UIScreen mainScreen] mainScreen].size.height

問題になるのはナビゲーションバーを非表示のビューからpushしたビューで
viewDidLoadで
ナビゲーションバーを消しても
self.navigationController.navigationBarHidden = NO;
self.view.frame.size.heightは460になるということ

正確なサイズを知りたい時は
viewDidLoadでナビゲーションバーのON/OFFをして
viewDidAppearで座標を取得すること

2012年12月25日火曜日

[iOS]ld: duplicate symbol

XCode4.5.2のビルドで以下のエラーが発生した。


duplicate symbol _OBJC_CLASS_$_PhotoViewController in:
    /Users/abrain/Library/Developer/Xcode/DerivedData/hogehoge-/Build/Intermediates/hogehoge.build/Debug-iphonesimulator/hogehoge.build/Objects-normal/i386/hogehogeAppDelegate.o
    /Users/abrain/Library/Developer/Xcode/DerivedData/hogehoge/Build/Intermediates/hogehoge.build/Debug-iphonesimulator/hogehoge.build/Objects-normal/i386/RootViewController.o
ld: 88 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

実際はもっと長いエラーだった。
duplicate symbol(PhotoViewControllerのシンボルが重複しています)
つまりクラス定義を2重にやってるらしいんだが、PhotoViewControllerに悪い場所はない。

いろいろやったところPhotoViewControllerを呼び出しているところが、
#import "PhotoViewController.m"
となっていた、
PhotoViewController.mからヘッダーを呼び出してるので2重定義となっている。
#import "PhotoViewController.h"
と修正してビルド完了。

XCodeうんうんじゃなくてC言語共通のエラーね。
コード補完で間違って.mを選択してしまったようだ。