2012年3月26日月曜日



f:id:bs-android:20120326141348g:image:w301:left

f:id:bs-android:20120326102939p:image:w300

はじめに


先日、NTTドコモ様から「しゃべってコンシェル」という、Android+音声認識によるマルチ検索・端末操作アプリケーションがリリースされました。弊社はこの「しゃべってコンシェル」及びその前身となるアプリの開発でご協力させて頂きました。

しゃべってコンシェル開発秘話



f:id:bs-android:20120326141348g:image:w301:left

f:id:bs-android:20120326102939p:image:w300

はじめに


先日、NTTドコモ様から「しゃべってコンシェル」という、Android+音声認識によるマルチ検索・端末操作アプリケーションがリリースされました。弊社はこの「しゃべってコンシェル」及びその前身となるアプリの開発でご協力させて頂きました。



f:id:bs-android:20120325145931p:image

はじめに


前回の記事では、ADT8で標準搭載されたProGuardの適用方法について解説しました。今回、ADT17でProGuardのいくつかの改善が行われたため、これら改善点について解説します。尚、本記事はProGuard Improvementsを元に翻訳したものです。

Androidに統合されたProGuardに関する改善点(ADT17)



f:id:bs-android:20120325145931p:image

はじめに


前回の記事では、ADT8で標準搭載されたProGuardの適用方法について解説しました。今回、ADT17でProGuardのいくつかの改善が行われたため、これら改善点について解説します。尚、本記事はProGuard Improvementsを元に翻訳したものです。

2012年3月17日土曜日






f:id:bs-android:20120314174132j:image:w620





3月14日に日本橋にて Google Japan 主催で Creative Sandbox という、広告代理店やクリエイター向けのイベントが開催されました。

http://www.google.co.jp/events/creativesandbox2012/

「テクノロジーとインターネットがコミュニケーションにどのような影響を与え、貢献ができるのかということを考える場」

というコンセプトのもと、広告代理店などの、制作営業担当、デザイナー、クリエーターをターゲットとし、Googleのテクノロジーを使って新たなコミュニケーションを創造するツールやアイディアをシェアするイベントです。

3月14日に開催されたGoogle Creative Sandboxに参加しました。






f:id:bs-android:20120314174132j:image:w620





3月14日に日本橋にて Google Japan 主催で Creative Sandbox という、広告代理店やクリエイター向けのイベントが開催されました。

http://www.google.co.jp/events/creativesandbox2012/

「テクノロジーとインターネットがコミュニケーションにどのような影響を与え、貢献ができるのかということを考える場」

というコンセプトのもと、広告代理店などの、制作営業担当、デザイナー、クリエーターをターゲットとし、Googleのテクノロジーを使って新たなコミュニケーションを創造するツールやアイディアをシェアするイベントです。

f:id:bs-android:20120315154949j:image:w620

3月6日から9日までの4日間、東京ビックサイトで開催された第1回「NFC & Smart WORLD 2012」でNFC QUESTが実施されました。

今回は「NFC & Smart WORLD」のリニューアルを象徴する特別企画として、主催者の日経新聞社さんと一緒にブリリアントサービスが企画/開発を行いました。

NFC & Smart WORLD 2012でNFC QUESTが実施されました

f:id:bs-android:20120315154949j:image:w620

3月6日から9日までの4日間、東京ビックサイトで開催された第1回「NFC & Smart WORLD 2012」でNFC QUESTが実施されました。

今回は「NFC & Smart WORLD」のリニューアルを象徴する特別企画として、主催者の日経新聞社さんと一緒にブリリアントサービスが企画/開発を行いました。

2012年3月15日木曜日



Twitter




ブログ


@tunakko_ さん






@muo_jpさん



@shogoggさん



@cattaka_netさん



@tryalさん



@youten_redoさん






@patorashさん



@eaglesakuraさん



@vvakameさん



@zamojojoさん



@shigepon7さん



@kame0_0さん



@tommmmyさん






リンクまとめ



Twitter




ブログ


@tunakko_ さん






@muo_jpさん



@shogoggさん



@cattaka_netさん



@tryalさん



@youten_redoさん






@patorashさん



@eaglesakuraさん



@vvakameさん



@zamojojoさん



@shigepon7さん



@kame0_0さん



@tommmmyさん








f:id:bs-android:20120310234432j:image:w400

9:00 開発の様子


ハッカソン2日目

会場に入り次第開発が始まります。

2日目



f:id:bs-android:20120310234432j:image:w400

9:00 開発の様子


ハッカソン2日目

会場に入り次第開発が始まります。



11:00 オリエンテーション


まずはSHARP白石さんからご挨拶をいただきました。


f:id:bs-android:20120311111910j:image:w400


続いてシャープハッカソンについて解説します。


f:id:bs-android:20120311112537j:image:w400


一般ユーザのすそ野も広がってきただろうということから、一般女性を招待いたしました。


最終的に使うのは一般ユーザーなので、その意見はとても重要です。


11:30 チーム分けとご飯


f:id:bs-android:20120311124009j:image:w400


作るものは後で決めることにして、近くにいる人とグループを作りました。


各チームにデザイナーと一般女性が1人以上いるようです。


f:id:bs-android:20120311120335j:image:w400


f:id:bs-android:20120311120149j:image:w400


おいしいご飯をいただきました。


12:00 アイデアソンの様子


各チーム何を作るか考えています


f:id:bs-android:20120311123923j:image:left:w400


f:id:bs-android:20120311123914j:image:left:w400


f:id:bs-android:20120311124142j:image:left:w400


f:id:bs-android:20120311124105j:image:left:w400


f:id:bs-android:20120311124205j:image:left:w400




女子力に関する参考文献が用意されていたため、読みながら考えてます


f:id:bs-android:20120311130041j:image:left:w400


f:id:bs-android:20120311130247j:image:left:w400


f:id:bs-android:20120311130147j:image:left:h400




14:00 アイデア発表


各チーム作るものが固まったようなので、アイデアの発表をおこなってもらいました。


各チームどんなものを作るのかご紹介します。


チームSH

f:id:bs-android:20120311143400j:image:w400




チームSHは上から降ってくるイケメンを矢で撃ち落とし


捕獲するというアプリを思いつきました。


春のアニキのつけまつ毛チーム

f:id:bs-android:20120311143644j:image:w400




カメラで撮った画像に勝手に、ちょっと恥ずかしい見出しをつけて友達に送ることができるアプリ


特攻野郎Bチーム

f:id:bs-android:20120311143543j:image:w400




紙に描いた絵をカメラで撮って、デコメとして送れるアプリ


LiveDECOチーム

f:id:bs-android:20120311143154j:image:w400




写真を選んで、デコってLiveWallpaperにすることができるアプリ


かわいいはパンツチーム

f:id:bs-android:20120311143122j:image:w400




写真を撮って、みんなで同時にデコれるアプリ


開発中の様子


アイデア発表も終わり、もくもくと開発開始です。


もくもくといってもまだ序盤なので、活発に意見し合いながら開発を進めていました。


f:id:bs-android:20120311144250j:image:w401:left


f:id:bs-android:20120311142939j:image:w401:left


f:id:bs-android:20120311142312j:image:w401:left


f:id:bs-android:20120311142126j:image:w401:left


f:id:bs-android:20120311141845j:image:w401:left


f:id:bs-android:20120311124133j:image:w401:left




今回もSHARPさんから最新端末をお借りしました!


f:id:bs-android:20120311132217j:image:w400


また、参加者から各地のお土産の差し入れをいただきました!


f:id:bs-android:20120311140030j:image:w400


ありがとうございます!


17:00 1日目終了


あっという間に1日目が終了してしまいました。


「はやーい」という声の中に、どこからか「ハッカソンはホテルに返ってからだ!」という声が…


1日目終了時点のホワイトボードの様子です。


f:id:bs-android:20120310081012j:image:w401:left


f:id:bs-android:20120310080953j:image:w401:left


f:id:bs-android:20120310080943j:image:w401:left


f:id:bs-android:20120310080937j:image:w401:left




懇親会


懇親会はシャープさんオススメの仏蘭西屋に行きました。


日本酒の酒蔵が経営する、美酒鍋で有名なお店です。


f:id:bs-android:20120310180401j:image:w401:left


f:id:bs-android:20120310183346j:image:w401:left


f:id:bs-android:20120311181258j:image:w401:left


f:id:bs-android:20120313183744j:image:h401:left




さすが日本酒がおいしいです。


みなさん若干飲み過ぎ感がある中、みんなでホテルへと帰ります。





ホテル


ホテルへと帰ると、もはや恒例となってしまった


ホテルでハッカソンが始まっていました。


寝る間も惜しんでガリガリとコーディングしています。


f:id:bs-android:20120310135428j:image:w400


話に聞くと2時間も寝てない人もいるとか…!





1日目



11:00 オリエンテーション


まずはSHARP白石さんからご挨拶をいただきました。


f:id:bs-android:20120311111910j:image:w400


続いてシャープハッカソンについて解説します。


f:id:bs-android:20120311112537j:image:w400


一般ユーザのすそ野も広がってきただろうということから、一般女性を招待いたしました。


最終的に使うのは一般ユーザーなので、その意見はとても重要です。


11:30 チーム分けとご飯


f:id:bs-android:20120311124009j:image:w400


作るものは後で決めることにして、近くにいる人とグループを作りました。


各チームにデザイナーと一般女性が1人以上いるようです。


f:id:bs-android:20120311120335j:image:w400


f:id:bs-android:20120311120149j:image:w400


おいしいご飯をいただきました。


12:00 アイデアソンの様子


各チーム何を作るか考えています


f:id:bs-android:20120311123923j:image:left:w400


f:id:bs-android:20120311123914j:image:left:w400


f:id:bs-android:20120311124142j:image:left:w400


f:id:bs-android:20120311124105j:image:left:w400


f:id:bs-android:20120311124205j:image:left:w400




女子力に関する参考文献が用意されていたため、読みながら考えてます


f:id:bs-android:20120311130041j:image:left:w400


f:id:bs-android:20120311130247j:image:left:w400


f:id:bs-android:20120311130147j:image:left:h400




14:00 アイデア発表


各チーム作るものが固まったようなので、アイデアの発表をおこなってもらいました。


各チームどんなものを作るのかご紹介します。


チームSH

f:id:bs-android:20120311143400j:image:w400




チームSHは上から降ってくるイケメンを矢で撃ち落とし


捕獲するというアプリを思いつきました。


春のアニキのつけまつ毛チーム

f:id:bs-android:20120311143644j:image:w400




カメラで撮った画像に勝手に、ちょっと恥ずかしい見出しをつけて友達に送ることができるアプリ


特攻野郎Bチーム

f:id:bs-android:20120311143543j:image:w400




紙に描いた絵をカメラで撮って、デコメとして送れるアプリ


LiveDECOチーム

f:id:bs-android:20120311143154j:image:w400




写真を選んで、デコってLiveWallpaperにすることができるアプリ


かわいいはパンツチーム

f:id:bs-android:20120311143122j:image:w400




写真を撮って、みんなで同時にデコれるアプリ


開発中の様子


アイデア発表も終わり、もくもくと開発開始です。


もくもくといってもまだ序盤なので、活発に意見し合いながら開発を進めていました。


f:id:bs-android:20120311144250j:image:w401:left


f:id:bs-android:20120311142939j:image:w401:left


f:id:bs-android:20120311142312j:image:w401:left


f:id:bs-android:20120311142126j:image:w401:left


f:id:bs-android:20120311141845j:image:w401:left


f:id:bs-android:20120311124133j:image:w401:left




今回もSHARPさんから最新端末をお借りしました!


f:id:bs-android:20120311132217j:image:w400


また、参加者から各地のお土産の差し入れをいただきました!


f:id:bs-android:20120311140030j:image:w400


ありがとうございます!


17:00 1日目終了


あっという間に1日目が終了してしまいました。


「はやーい」という声の中に、どこからか「ハッカソンはホテルに返ってからだ!」という声が…


1日目終了時点のホワイトボードの様子です。


f:id:bs-android:20120310081012j:image:w401:left


f:id:bs-android:20120310080953j:image:w401:left


f:id:bs-android:20120310080943j:image:w401:left


f:id:bs-android:20120310080937j:image:w401:left




懇親会


懇親会はシャープさんオススメの仏蘭西屋に行きました。


日本酒の酒蔵が経営する、美酒鍋で有名なお店です。


f:id:bs-android:20120310180401j:image:w401:left


f:id:bs-android:20120310183346j:image:w401:left


f:id:bs-android:20120311181258j:image:w401:left


f:id:bs-android:20120313183744j:image:h401:left




さすが日本酒がおいしいです。


みなさん若干飲み過ぎ感がある中、みんなでホテルへと帰ります。





ホテル


ホテルへと帰ると、もはや恒例となってしまった


ホテルでハッカソンが始まっていました。


寝る間も惜しんでガリガリとコーディングしています。


f:id:bs-android:20120310135428j:image:w400


話に聞くと2時間も寝てない人もいるとか…!







f:id:bs-android:20120311094718j:image:w400


(終始大人気だったBIG PAD)


前回のエントリで告知しました「第4回 SHARPハッカソン」が3月10日-11日に東広島で開催されました。


今回は通常のハッカソンとは趣向を変え、プログラマーとデザイナーに加え一般女性を招待し、「女子力向上アプリ」というテーマでハッカソンを実施しました。


メンバー内訳は以下のとおりです。


プログラマー:15名


デザイナー:5名


一般女性:5名





3月10日-11日に第4回SHARPハッカソン@東広島が開催されました



f:id:bs-android:20120311094718j:image:w400


(終始大人気だったBIG PAD)


前回のエントリで告知しました「第4回 SHARPハッカソン」が3月10日-11日に東広島で開催されました。


今回は通常のハッカソンとは趣向を変え、プログラマーとデザイナーに加え一般女性を招待し、「女子力向上アプリ」というテーマでハッカソンを実施しました。


メンバー内訳は以下のとおりです。


プログラマー:15名


デザイナー:5名


一般女性:5名





2012年3月9日金曜日



SHARP様 主催で第4回 SHARPハッカソンが広島で開催されます。


今回も弊社が運営を勤めさせて頂きます。


Twitter


参加者リスト

参加者のTwitterアカウントのリストを作成しました。


https://twitter.com/#!/bs_android/shthon2012s


ハッシュタグ

当日の参加者のつぶやきは以下のハッシュタグで見ることができます。


#shthon2012s


https://twitter.com/#!/search/%23shthon2012s


Ustream


当日はUstreamで配信する予定です。


URLはこちら


http://www.ustream.tv/channel/shthon2012s





技術部 山下智樹





3月10日-11日に第4回SHARPハッカソン@東広島が開催されます



SHARP様 主催で第4回 SHARPハッカソンが広島で開催されます。


今回も弊社が運営を勤めさせて頂きます。


Twitter


参加者リスト

参加者のTwitterアカウントのリストを作成しました。


https://twitter.com/#!/bs_android/shthon2012s


ハッシュタグ

当日の参加者のつぶやきは以下のハッシュタグで見ることができます。


#shthon2012s


https://twitter.com/#!/search/%23shthon2012s


Ustream


当日はUstreamで配信する予定です。


URLはこちら


http://www.ustream.tv/channel/shthon2012s





技術部 山下智樹





2012年3月3日土曜日

アップが遅くなりましたが、MWC2012 2日目~4日目のレポートです。

■VIRE LABS

f:id:bs-android:20120303114456j:image:w360:left

リアルタイムにレンダリングされる3Dを組み込んだホームアプリを展示されていました。

スマートフォンを傾けたりすると、それに伴い背景の3Dが動きます。

斬新な表現としてもすごいですが、立体感を表現することで直感的な使いやすいUIとしても使えると感じました。

f:id:bs-android:20120303114457j:image:w360:left

後日この会社の方々と飲みに行きましたが、とてもおもしろい人たちで、フィンランドの方なのですが、言葉の壁を越えてすぐに打ち解けることができました。

しかし、プロダクトに関しては真剣で、このアプリを日本で売ってはどうかと話をもちかけたところ、

「日本で売りたいが、売るのであればちゃんと日本のことを調べて、日本のユーザーにあったものにカスタマイズして提供したい」キリッ

とこだわりを話してくれました。

■scalado

f:id:bs-android:20120303114453j:image:w360:left

撮った写真から、通行人などじゃまな物を消してしまうアプリ「REMOVE」がおもしろそうだったので、実際に体験に行ってきました。

下の動画はイメージなので、実際にはどのような感じなのかが気になっていたのですが、やはり連射する分、撮影や消せる部分の抽出には数秒時間がかかりました。ですが、消した部分を戻す操作などのUIが追加されており、実用化に向けて着実に進んでいるようです。


D

f:id:bs-android:20120303114454j:image:w360:left

ブースは分かりにくい場所にあったのですが、テレビの取材がきたりと、なかなかの盛況ぶりでした。

f:id:bs-android:20120303114455j:image:w360:left

ライブラリ化して、日本で技術者向けのコミュニティを作り、広めてはどうかと提案しました。

後日、またメールで連絡を取り合いますが、よい関係になればいいなと思います。

■総括

f:id:bs-android:20120303114458j:image:w360:left

その他にも、多くのブースを訪れ、我々といっしょに何ができるのか、どんなメリットがあるのかを模索しながら話をさせて頂きました。

いろいろな国の方々と交流ができたり、通常アポ無しではとても会えないような大企業に話しかけることができたり。

これもMWCの醍醐味ですね。



文責:技術部 梶井祐介

『MWC2012』2日目~4日目レポート

アップが遅くなりましたが、MWC2012 2日目~4日目のレポートです。

■VIRE LABS

f:id:bs-android:20120303114456j:image:w360:left

リアルタイムにレンダリングされる3Dを組み込んだホームアプリを展示されていました。

スマートフォンを傾けたりすると、それに伴い背景の3Dが動きます。

斬新な表現としてもすごいですが、立体感を表現することで直感的な使いやすいUIとしても使えると感じました。

f:id:bs-android:20120303114457j:image:w360:left

後日この会社の方々と飲みに行きましたが、とてもおもしろい人たちで、フィンランドの方なのですが、言葉の壁を越えてすぐに打ち解けることができました。

しかし、プロダクトに関しては真剣で、このアプリを日本で売ってはどうかと話をもちかけたところ、

「日本で売りたいが、売るのであればちゃんと日本のことを調べて、日本のユーザーにあったものにカスタマイズして提供したい」キリッ

とこだわりを話してくれました。

■scalado

f:id:bs-android:20120303114453j:image:w360:left

撮った写真から、通行人などじゃまな物を消してしまうアプリ「REMOVE」がおもしろそうだったので、実際に体験に行ってきました。

下の動画はイメージなので、実際にはどのような感じなのかが気になっていたのですが、やはり連射する分、撮影や消せる部分の抽出には数秒時間がかかりました。ですが、消した部分を戻す操作などのUIが追加されており、実用化に向けて着実に進んでいるようです。


D

f:id:bs-android:20120303114454j:image:w360:left

ブースは分かりにくい場所にあったのですが、テレビの取材がきたりと、なかなかの盛況ぶりでした。

f:id:bs-android:20120303114455j:image:w360:left

ライブラリ化して、日本で技術者向けのコミュニティを作り、広めてはどうかと提案しました。

後日、またメールで連絡を取り合いますが、よい関係になればいいなと思います。

■総括

f:id:bs-android:20120303114458j:image:w360:left

その他にも、多くのブースを訪れ、我々といっしょに何ができるのか、どんなメリットがあるのかを模索しながら話をさせて頂きました。

いろいろな国の方々と交流ができたり、通常アポ無しではとても会えないような大企業に話しかけることができたり。

これもMWCの醍醐味ですね。



文責:技術部 梶井祐介

2012年3月2日金曜日

The second post about the making of iNippon, the English-Japanese dictionary of conversations about Japan.

More information about the app can be found in iTunes Preview or in the previous blog post.
This time we take a close look at the History page.



Default view, all scrolls closed.
One scroll open.

Usage:
- Tapping a scroll will open it with an animation.
- Tapping an open scroll will close it with an animation.
- Tapping a closed scroll while another scroll is open will first close the open scroll and then open the scroll that was tapped.
- Tapping a historical event will toggle its language between English and Japanese. Of course the height of the text will change and by getting the content height of the UITextView we can tell the UITableView controller of the new row height and with a nice animation adjust the height of that row as well as the y-position of all rows below it (automatically done for us by the UITableView).

The first idea that probably comes to everyones mind is to use a tableview with the scrolls as section headers and each historical event as row in that section (data read from database). At least, that's what I thought would be the natural approach and as a matter of fact, Apple has sample code showing how to implement this and how to make it looks nice with the new animation features in UITableView.

The sample code is called "Table View Animations and Gestures"(Shakespeare plays and citations) and can be found in the iOS Developer Library. If I remember correctly this might also be presented in a WWDC 2010 video which you can access if you are a registered developer.

Problem
There is a problem however with this sample code and how the animations are implemented and I will try to explain to you how to reproduce this.
- Download the sample code and run the app in the simulator.
- Expand the first section header
- Pinch out to make the rows of the first section taller, do this until the second section header disappears out of the bottom part of the screen.
- Scroll down to the second section header and tap it. 

Now the new UITableView animations will animate the closing of the first section and the opening of the second section. This usually looks nice except in this case. If you followed these steps you will see that the animation "flickers", and doesn't look nice at all. Try it with the iPhone simulator's "slow animations"-option and you'll see what's going on. This was totally unacceptable for me and no matter how I tried I could not make this particular case animate in a nice way so I had to scrap this implementation.

Solution
Because I use Core Data and the user can toggle between languages in individual events (which will change the height that item) I wanted to use UITableView to get "free" animations when changing heights. However, I couldn't use it for expanding and contracting sections in a way that would give a good user experience and nice animations. 

What came to be the solution that can be experienced in the app is the following.
For all the headers, that is, the scrolls themselves, I put them in plain UIViews and stack them from top to bottom.

When a user taps a scroll, I load up a customized UITableView which is hidden behind the scroll and then animate it down so it looks like the scroll is being unrolled and the the same adjust the y-position of all the scrolls below so they don't get covered by the opening scroll.

Also, when a user change the language of an individual event the table view will change height and animate automatically, but at this time I also have to adjust the y-position of all scrolls below with the same animation duration as the table view.

When closing a scroll I basically do the opposite. A bunch of animations, all with the same duration makes this look really natural and nice.

So how about the problem that was caused by Apple's implementation. No problem anymore. When a user taps a closed scroll while another scroll is open, I first close the open one and then open the one that was tapped and set the content offset of the outer scroll view so that the opened scroll is at the top of the screen.

Maybe creating a new controller especially for this would had been the most elegant solution but in this case I wanted to save time and reuse the UITableView I already had at hand so the solution became a mix of my own controller for the section headers (scrolls) and a UITableView for the events.

I haven't bothered filing a bug report to Apple about this behavior because if they took the time to create the sample code and properly test it, this malfunctioning animation should have been obvious to them and I doubt a bug report will fix anything if they haven't fixed it earlier. 

However, maybe the best thing to do is to file that bug report anyway...


iNippon Part 2

The second post about the making of iNippon, the English-Japanese dictionary of conversations about Japan.

More information about the app can be found in iTunes Preview or in the previous blog post.
This time we take a close look at the History page.



Default view, all scrolls closed.
One scroll open.

Usage:
- Tapping a scroll will open it with an animation.
- Tapping an open scroll will close it with an animation.
- Tapping a closed scroll while another scroll is open will first close the open scroll and then open the scroll that was tapped.
- Tapping a historical event will toggle its language between English and Japanese. Of course the height of the text will change and by getting the content height of the UITextView we can tell the UITableView controller of the new row height and with a nice animation adjust the height of that row as well as the y-position of all rows below it (automatically done for us by the UITableView).

The first idea that probably comes to everyones mind is to use a tableview with the scrolls as section headers and each historical event as row in that section (data read from database). At least, that's what I thought would be the natural approach and as a matter of fact, Apple has sample code showing how to implement this and how to make it looks nice with the new animation features in UITableView.

The sample code is called "Table View Animations and Gestures"(Shakespeare plays and citations) and can be found in the iOS Developer Library. If I remember correctly this might also be presented in a WWDC 2010 video which you can access if you are a registered developer.

Problem
There is a problem however with this sample code and how the animations are implemented and I will try to explain to you how to reproduce this.
- Download the sample code and run the app in the simulator.
- Expand the first section header
- Pinch out to make the rows of the first section taller, do this until the second section header disappears out of the bottom part of the screen.
- Scroll down to the second section header and tap it. 

Now the new UITableView animations will animate the closing of the first section and the opening of the second section. This usually looks nice except in this case. If you followed these steps you will see that the animation "flickers", and doesn't look nice at all. Try it with the iPhone simulator's "slow animations"-option and you'll see what's going on. This was totally unacceptable for me and no matter how I tried I could not make this particular case animate in a nice way so I had to scrap this implementation.

Solution
Because I use Core Data and the user can toggle between languages in individual events (which will change the height that item) I wanted to use UITableView to get "free" animations when changing heights. However, I couldn't use it for expanding and contracting sections in a way that would give a good user experience and nice animations. 

What came to be the solution that can be experienced in the app is the following.
For all the headers, that is, the scrolls themselves, I put them in plain UIViews and stack them from top to bottom.

When a user taps a scroll, I load up a customized UITableView which is hidden behind the scroll and then animate it down so it looks like the scroll is being unrolled and the the same adjust the y-position of all the scrolls below so they don't get covered by the opening scroll.

Also, when a user change the language of an individual event the table view will change height and animate automatically, but at this time I also have to adjust the y-position of all scrolls below with the same animation duration as the table view.

When closing a scroll I basically do the opposite. A bunch of animations, all with the same duration makes this look really natural and nice.

So how about the problem that was caused by Apple's implementation. No problem anymore. When a user taps a closed scroll while another scroll is open, I first close the open one and then open the one that was tapped and set the content offset of the outer scroll view so that the opened scroll is at the top of the screen.

Maybe creating a new controller especially for this would had been the most elegant solution but in this case I wanted to save time and reuse the UITableView I already had at hand so the solution became a mix of my own controller for the section headers (scrolls) and a UITableView for the events.

I haven't bothered filing a bug report to Apple about this behavior because if they took the time to create the sample code and properly test it, this malfunctioning animation should have been obvious to them and I doubt a bug report will fix anything if they haven't fixed it earlier. 

However, maybe the best thing to do is to file that bug report anyway...


Related Posts Plugin for WordPress, Blogger...