既存アプリのios 7対応 | ios 7エンジニア勉強会

Post on 15-Jan-2015

38.559 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

既存アプリのiOS7対応

西 磨翁2013年10月7日

本日の事例となるアプリ

iOS7対応にも特集されました

ヤフオク!アプリ

IOS6

IOS7対応 途中

IOS7対応 最終形

作業は大きく分けて2つ

•iOS7向けに実装方法を変更する

•iOS7向けに装飾を行う

アイコンの準備・変更については今回は割愛します

ヤフオク!アプリについて

•iPhoneが日本に登場してまもなくリリースした歴史あるアプリ

•iOS4.3以降をサポート中

iOS7向けに実装方法を変更する

1.OS毎に処理を分岐する

このようなメソッドを用意しておいてOS毎の分岐処理に備えましょう

+ (BOOL)isOverThisVersion:(NSString *)version{! NSString!*currentVersion =![[UIDevice currentDevice]systemVersion];! return! (! [currentVersion! ! ! ! ! compare:! ! ! ! ! ! version! ! ! ! ! options:! ! ! ! ! ! NSNumericSearch! ! ! ! ]! !=!NSOrderedAscending! ! ! );}

2.UIViewControllerでの潜り込みに対処する

画面の上部が表示されない!?

iOS7では画面全体が表示領域となる

NavigationBarに潜りこんでしまう

NavigationBarに潜りこんでしまう

対処方法表示領域の拡張をやめさせる

self.edgesForExtendedLayout = UIRectEdgeNone;

※IOS7の時のみ実行するようにしましょうまた、すりガラスの表現が失われます

UIViewControllerにTableViewをaddSubviewした場合にも

発生します

画面の上部が潜り込む・・

同じようにself.edgesForExtendedLayout =

UIRectEdgeNone;※IOS7の時のみ実行するようにしましょうまた、すりガラスの表現が失われます

3.階層構造の変更に対応するその1

UITableViewCell

UITableViewCellContent

UIButtonなどのコンポーネント

UITableViewCell

UITableViewCellContent

UIButtonなどのコンポーネント

UITableViewCellScrollView

iOS6 iOS7

コンポーネントからsuperview.superviewでUITableViewCellにアクセスできなくなりました。

superview

superview

superview

superview

superview

対処方法

+ (UITableViewCell*)searchTableViewCell:(UIView*)view{ id target = [view superview]; if (!target) { return nil; } if ([target isKindOfClass:[UITableViewCell class]]) { return target; } return [self searchTableViewCell:target];}

UITableViewCellを探索して取得するようにする

superviewでUITableViewCellにアクセスしようとすること自体、Appleが推奨する方法ではありません。新規にアプリを作る場合は他の方法をご検討ください。

今後動かなくなる可能性があります。

ヤフオク!アプリは開発の歴史が長く、修正の影響範囲が大きかったため今回はこのような対応となりました。

ご注意!

4.階層構造の変更に対応するその2

UITableViewCellからsuperviewでUITableViewにアクセスできなくなりました

UITableView

UITableViewCell

UITableView

UITableViewCell

UITableViewWrapperView

iOS6 iOS7

superview

superview

superview

UITableView *tableView = nil; if (iOS7なら~) { //iOS7ではcell.superviewではUITableViewWrapperViewが返却される。 //このためUITableViewを取得するためにはcell.superview.superviewと //処理する必要がある tableView = (UITableView*)cell.superview.superview; }else{ tableView = (UITableView*)cell.superview; }

UITableViewCellの例と同じように探索してもよいし、単純な分岐でも大丈夫

superviewでUITableViewにアクセスしようとすること自体、Appleが推奨する方法ではありません。新規にアプリを作る場合は他の方法をご検討ください。

今後動かなくなる可能性があります。

ヤフオク!アプリは開発の歴史が長く、修正の影響範囲が大きかったため今回はこのような対応となりました。

くどいようですが・・・ご注意!

ヤフオク!アプリでは以上までの対応を行ってようやく動作するようになりました。

とりあえず動くレベル

もっとカッコよくしたい!

iOS7向けに装飾を行う

5.タブ上に罫線が表示される問題を解決する

UITabBarControllerにUIButtonをaddSubviewしていると発生する

対処方法

//ダミーのタブバー背景 [[UITabBar appearance] setBackgroundImage:[[UIImage alloc] init]]; //罫線除去 [[UITabBar appearance] setShadowImage:[[UIImage alloc] init]];

6.iOS6と同様の罫線表示にする

iOS7標準 罫線を引く

//セルの罫線のインデントをなくす [UITableViewCell appearance].separatorInset = UIEdgeInsetsZero;

7.「<」アイコンを変更する

iOS7標準 独自アイコン

//ナビゲーションバーの戻るのアイコンを変更[UINavigationBar appearance].backIndicatorImage = [UIImage imageNamed:@"header_allow_ios7.png"];[UINavigationBar appearance].backIndicatorTransitionMaskImage = [UIImage imageNamed:@"header_allow_ios7.png"];

iOS7より新たに追加されたメソッド

8.UITableViewStyleGroupedの強制大文字に対応する

iOS6 iOS7

UITableViewStylePlainに変更するまたは

tableView:viewForHeaderInSection:を実装する

他にも方法はありそうですが上記どちらかでOK

UITableViewStylePlainにしました

iOS7でも小文字が使える

9.accessoryはaccessoryViewに配置する

iOS7だと右づめになっていない

[cell.contentView addSubview:sw];↓

cell.accesoryView = sw;

その他のUIの色はtintColorをUIAppearanceで一括指定することで対応しました

まとめ• iOS6がリリースされた時と比べ対応工数が格段に多い。UI変更も含めると余裕を持った工数見積が必要。ヤフオク!アプリの場合、iOS6の対応を行った時よりも10倍程度の工数がかかった。

• UIAppearanceを活用して装飾に関する修正量を減らすようにする

APPENDIX

リリース後の反応について

色々なご意見を頂いていますが、IOS7対応後、

DL数はかなり増えました。一時的ではなく現在も継続してい

ます

IOS7対応の参考になれば幸いですご清聴ありがとうございました

top related