PDFとZIPファイルの観覧とテキストファイルの縦書き表示をする自炊ビューアを作ろうとしてるけど,他の仕事でブランクが飽きすぎた.ああ,億劫になってきた
Read more
0
戦場のヴァルキュリア3の体験版をプレイした
戦場のヴァルキュリア3の体験版をプレイ.このシリーズは好きで今度こそPS3復帰と期待したけど,今回もPSPだったのでちょっとテンションダウンだけど,好きなので試しにDLしてプレイ.
体験版ということで,なんで特殊能力が使えるの?,このキャラクターは誰?は仕方ないとして,システムが2の焼き直しだ・・・.2は嫌いじゃないけど,なんか新鮮みが足りない.これは悩むけど,結局買うと思う.
Read more
体験版ということで,なんで特殊能力が使えるの?,このキャラクターは誰?は仕方ないとして,システムが2の焼き直しだ・・・.2は嫌いじゃないけど,なんか新鮮みが足りない.これは悩むけど,結局買うと思う.
0
UIButtonのbuttonWithTypeはオーバーライドできない
@iphone_dev_jpでUIButtonのサブクラスとbuttonWithTypeについての質問があった.
結論から言うと,UIButtonのサブクラスでbuttonWithTypeはオーバーライドはできない(そもそもクラスメソッドのオーバーライドはしない).UIButtonのサブクラスを作る場合は,buttonWithTypeに触れずにコーディングしないといけない.ただ,UIButtonはクラスメソッド(buttonWithType)でしか初期化方法がドキュメントに載っていなく,気になっていたので,ちょうど良かったので調べてみた.
UIButtonのサブクラスMyButtonを作って,buttonWithTypeを使うとエラーが起こる.
エラーは仕方ないとして,エラーメッセージを見て気がついていたことがある.buttonWithTypeに与えるUIButtonType_によって返ってくるクラスが変わっていた.UIButtonTypeCustomだと自作クラス(MyButton),UIButtonTypeRoundedRectだとPrivateボタン,その他だとUIButtonで返ってくる.UIButtonって簡単に使っているけど,結構奥深い.
実は質問者本人が最初ごろにしたツイートで既に結論がでてたんだよな.質問者がしたいことが今一わからないから何だけど,カテゴリでメソッドを追加したらいいんじゃないかな.
Read more
結論から言うと,UIButtonのサブクラスでbuttonWithTypeはオーバーライドはできない(そもそもクラスメソッドのオーバーライドはしない).UIButtonのサブクラスを作る場合は,buttonWithTypeに触れずにコーディングしないといけない.ただ,UIButtonはクラスメソッド(buttonWithType)でしか初期化方法がドキュメントに載っていなく,気になっていたので,ちょうど良かったので調べてみた.
UIButtonのサブクラスMyButtonを作って,buttonWithTypeを使うとエラーが起こる.
+(id)buttonWithType:(UIButtonType)buttonType_
{
MyButton *myButton = [super buttonWithType:UIButtonType_];
[myButton setHoge:hoge_];
return myButton;
}
エラーは仕方ないとして,エラーメッセージを見て気がついていたことがある.buttonWithTypeに与えるUIButtonType_によって返ってくるクラスが変わっていた.UIButtonTypeCustomだと自作クラス(MyButton),UIButtonTypeRoundedRectだとPrivateボタン,その他だとUIButtonで返ってくる.UIButtonって簡単に使っているけど,結構奥深い.
実は質問者本人が最初ごろにしたツイートで既に結論がでてたんだよな.質問者がしたいことが今一わからないから何だけど,カテゴリでメソッドを追加したらいいんじゃないかな.
0
iPhone:アプリ内で色違い画像を生成する
先日,@iphone_dev_jpで同パターンの色違い画像がアプリ内で作れないかとあった.これはちょっと前から同じことを考えていたので,作ってみた.
最初,単色画像を動的に作ってそれをマスク処理で切り取ればと思ったけど,アルファ値が考慮されないので断念.それじゃ,UIImageのブレンド設定でと思ったら,これもアルファ値だけを残して他の輝度値を変えるのが上手く行かなかったので断念.
結局,単純に画像のアルファ値だけを残して他の輝度値を直接書き換えるようにしてみた.小さいボタン画像ぐらいにしか使わないよね?という前提.大きな画像だと無駄な計算が増えるのであまりお勧めできない.
----------
追記(9/22)
----------
アルファ値を考慮したマスクはCGContextClipToMaskを使う,またはCGImageCreateWithMaskの設定を変更すればできると知ったので,実装した.DLはこちらから.ライセンスは「使った分だけ昼飯を隣人に奢る」と「自己責任」です.
Read more
最初,単色画像を動的に作ってそれをマスク処理で切り取ればと思ったけど,アルファ値が考慮されないので断念.それじゃ,UIImageのブレンド設定でと思ったら,これもアルファ値だけを残して他の輝度値を変えるのが上手く行かなかったので断念.
結局,単純に画像のアルファ値だけを残して他の輝度値を直接書き換えるようにしてみた.小さいボタン画像ぐらいにしか使わないよね?という前提.大きな画像だと無駄な計算が増えるのであまりお勧めできない.
----------
追記(9/22)
----------
アルファ値を考慮したマスクはCGContextClipToMaskを使う,またはCGImageCreateWithMaskの設定を変更すればできると知ったので,実装した.DLはこちらから.ライセンスは「使った分だけ昼飯を隣人に奢る」と「自己責任」です.
12
iPadアプリ:ネームパッド(NamePad) v1.1
NamePad(ネームパッド)は,漫画のネーム作成を目的としたシンプルなお絵かきアプリです.ネームに不可欠なペンと縦書きテキストを備え,場所を問わず,アイディアを思いついたその場所で,ネームを作成することができます.
本アプリの主な機能は以下の通りです.
■ペン■
黒色 / 灰色 / 赤色のペンと消しゴム(それぞれ太さ2種類)があり,これらは左に並んだアイコン群から簡単に選択できます.またフリーバンドと直線の2つの描画パターンを用意しました.
■テキストボックス■
左アイコンの最上部の吹き出しアイコンを押すと,テキストモードに切り替わります.新規テキストボックスはそのアイコンをドラッグして,任意に配置します.また,ボックスの位置とサイズ,およびフォントサイズは,自由に変更可能です.
■原稿用紙■
2本指タップで表示倍率(1倍と2倍ズーム)を切り替えます.また,2本指ドラッグで用紙を任意に移動でき,3本指タップで位置と倍率が初期化されますに戻ります.
■プレビュー■
3種類のプレビューを用意しました.(1)ページ番号(1/2のように表示される)をタップすると,ページジャンプも備えた簡易のスライドショーが現れます.ページ確認をしつつ編集したいページにダブルタップで移動します(なお,ジャンプするページはスライドショーの中央に表示されたページです).(2)サムネイルボタン(田のようなボタン)をタップすると,2x2のサムネイルが表示されます.ここでページをダブルタップするとそのページに移動します.(3)iPadを横にして持つと,書籍のような見開きで表示されます.
■エクスポート■
作成したネームは,写真ライブラリに書き出す,PDFや画像または連番画像(ZIPファイル)に変換,テキストを書出しことができます.また,メール添付もあり,簡単にネームのやり取りを行うことができます.iTunesのファイル共有に対応しており,ネームファイルをファイル共有でやり取りすることで,複数でネームファイルの確認が行えます.なお,複数人でネームファイルを別々に編集する場合,自動同期機能はありませんので,ファイルの上書きなどにはお気を付け下さい.
最後に,私は漫画が大好きで,日々楽しませてもらっています.少しでも漫画家さんの手助けになれば,幸いです.
*iPadにペン(スタイラス)は付属していません.本アプリは指で書くことが出来ますが,指で書くことに違和感をお持ちの方は,静電容量式のタッチパネル用ペンをご用意して,お使いください(このペンは導電スポンジなどで代用が可能です).
今後,以下のアップデートを予定しています.
・テキストの読み込み
読み込みはテキストファイルに台詞の区切りやどのページに配置するのかという記述ルールを設定しないといけないため,使いやすいインタフェースを考える時間をください.
・マルチタスク機能
iOS4.2からの機能になりますので,iPadのアップデート(無料)が必要になります.
その他希望する機能があれば,コメントやTwitterで連絡くださいませ.AppStoreでも構いませんが,要望に対して私から質問や返信することもあるので,返信可能な手段で連絡してもらうとありがたいです.
=== 更新内容 ===
2010/10/19 v1.1
追加機能
(1)テキストの書き出し
(2)undo最大30回(メモリの使用状況により回数は変わります)
(3)サムネイルにページジャンプ
修正項目
(1)短間隔のペン入力の不具合
(2)テキストボックス青点の挙動.
2010/9/15 v1.0
初版リリース
Read more
本アプリの主な機能は以下の通りです.
■ペン■
黒色 / 灰色 / 赤色のペンと消しゴム(それぞれ太さ2種類)があり,これらは左に並んだアイコン群から簡単に選択できます.またフリーバンドと直線の2つの描画パターンを用意しました.
■テキストボックス■
左アイコンの最上部の吹き出しアイコンを押すと,テキストモードに切り替わります.新規テキストボックスはそのアイコンをドラッグして,任意に配置します.また,ボックスの位置とサイズ,およびフォントサイズは,自由に変更可能です.
■原稿用紙■
2本指タップで表示倍率(1倍と2倍ズーム)を切り替えます.また,2本指ドラッグで用紙を任意に移動でき,3本指タップで位置と倍率が初期化されますに戻ります.
■プレビュー■
3種類のプレビューを用意しました.(1)ページ番号(1/2のように表示される)をタップすると,ページジャンプも備えた簡易のスライドショーが現れます.ページ確認をしつつ編集したいページにダブルタップで移動します(なお,ジャンプするページはスライドショーの中央に表示されたページです).(2)サムネイルボタン(田のようなボタン)をタップすると,2x2のサムネイルが表示されます.ここでページをダブルタップするとそのページに移動します.(3)iPadを横にして持つと,書籍のような見開きで表示されます.
■エクスポート■
作成したネームは,写真ライブラリに書き出す,PDFや画像または連番画像(ZIPファイル)に変換,テキストを書出しことができます.また,メール添付もあり,簡単にネームのやり取りを行うことができます.iTunesのファイル共有に対応しており,ネームファイルをファイル共有でやり取りすることで,複数でネームファイルの確認が行えます.なお,複数人でネームファイルを別々に編集する場合,自動同期機能はありませんので,ファイルの上書きなどにはお気を付け下さい.
最後に,私は漫画が大好きで,日々楽しませてもらっています.少しでも漫画家さんの手助けになれば,幸いです.
*iPadにペン(スタイラス)は付属していません.本アプリは指で書くことが出来ますが,指で書くことに違和感をお持ちの方は,静電容量式のタッチパネル用ペンをご用意して,お使いください(このペンは導電スポンジなどで代用が可能です).
今後,以下のアップデートを予定しています.
・テキストの読み込み
読み込みはテキストファイルに台詞の区切りやどのページに配置するのかという記述ルールを設定しないといけないため,使いやすいインタフェースを考える時間をください.
・マルチタスク機能
iOS4.2からの機能になりますので,iPadのアップデート(無料)が必要になります.
その他希望する機能があれば,コメントやTwitterで連絡くださいませ.AppStoreでも構いませんが,要望に対して私から質問や返信することもあるので,返信可能な手段で連絡してもらうとありがたいです.
=== 更新内容 ===
2010/10/19 v1.1
追加機能
(1)テキストの書き出し
(2)undo最大30回(メモリの使用状況により回数は変わります)
(3)サムネイルにページジャンプ
修正項目
(1)短間隔のペン入力の不具合
(2)テキストボックス青点の挙動.
2010/9/15 v1.0
初版リリース
0
ガイドラインもNDAじゃないの?
アップルが最近,某ガイドラインを公表した.そのドキュメントは開発者ログインしないと見れない.その内容でワイワイガヤガヤ話すのならともかく,内容そのままを転載するのってアウトじゃね?.ガイドラインの転載はOKやっていう記述ってあるのかな.
Read more
8
iPad: UIPopoverControllerとUIActionSheetは閉じてくれ
幾つかのアプリは,UIPopoverControllerとUIActionSheetを「明示的に閉じる」を実装していない(注1).それらを閉じるにはそれら外をタップすれば閉じるけど,指を遠くに動かさなければならない,かつ,アプリには色々なところにタップイベントが隠れているので,想定外の動作を引き起こす場合がある(注2).このインタフェースは致命的.有名どころのアプリでも,これを見る.ポップオーバー類は「開く」と「閉じる」をセットで実装してほしい.ちなみに,iPad用Safariはちゃんと実装している(さすがアップル!).(注3)
注1:「閉じる」に関してであり「閉じるボタン」ではない.領域外タップを期待して「閉じる」を自前で実装していないということ.
注2:無駄な動きが増えれば増えるほど誤動作が起こる確率は上がります.シングルタップのつもりが勢いあまってダブルやトリプルに.この話では,開ボタンに「閉じる」があれば,わざわざ指を領域外に移動させる必要がなくなるじゃないでか!
注3:本来アップルが求めるUIは「領域外のタップで閉じる」を求めている.開いたボタンも領域外となるが,そのボタンが「開く」しか制御してなければ,「閉じる」を期待してそのボタンを押しても結局開くだけになる.純正のSafariやMailが規定通り閉じるのに,一部サードがそれ従わないというのはどうしたものか,というお話.
例えばUIActionSheetの場合,visibleを確認すれば,1つのメソッド(1つのボタンだけ)でUIActionSheetの「開く」と「閉じる」を制御できる.下記はその一例.ちなみに,UIActionSheetを複数の用途で使い回すときは,下記コードを少し加筆しないとユーザーには優しくないよ.
----------
勘違いされた方がいたので追記(9/12)
----------
簡単に言い換えると,(コード例を見ても分かると思うけど)ポップオーバーのトリガーになるボタンを開ボタンだけでなく開閉ボタンにしろということです.開ボタンと閉ボタンの二つにしろという話ではありません(セットは独立って意味じゃないだろ・・・).試しに,今お使いのブラウザの「ファイル」ボタン(なければ,それ相応のモノ)を押してメニューを開いてください.さらに,そのボタンを押してください.ちゃんと閉じますよね,このことです.このメニューが閉じなかったら,不便だと感じませんか?.「俺なんか毎回別の場所をクリックして閉じてるぜ!」なんて人は少ないと思います.
タップイベントのことは,ユーザーは必ず規定のアクションをするのか?って話と関連します.手ぶれなんかする人間はいない!,机だけでしか使わない!と思っているなら今すぐ開発を辞めた方がいい.人間の行動には必ず不確実性が伴います.シングルタップを意図しても,ダブルタップになることがあるため,“想定外の動作を引き起こす場合がある”と書きました.特にこの場合,開ボタンから別の位置に移動するための速度(加速度)が指に加わるので,その可能性は上がります.他にも動画を見てもらえれば分かりますが,ポップオーバー中はすべてのタッチイベントが停止するわけではありません.ただ閉じたいと思ったのに,他のボタンを触ってしまって,想定外のアクションが起こる(動画では別のポップオーバーが開く)のはナンセンスです.ユーザーすべて,子供,大人,老人,障害者,・・・,があなたのような思考やスキルを持っているわけではありませんし,あなたも「絶対に間違えることはない!」とは言い切れないでしょう.
アプリはXcodeでビルドしてケーブルを繋いだMacの目の前で操作するものではありません.持ち歩いたり,横になったりして操作すると,開発者でも思いもしない操作が起こります.あなたが,俺のアプリはどんなユーザーでも誤動作を絶対にさせない!,痙攣していれもシングルタップとダブルタップを区別できる!(極端の例ですが)と言いきるならば関係のない話ですが,相手が人間ならば,それは不可能です.誤動作を引き起こす可能性があるならば,(100%は無理ですが)その可能性を出来る限り取り除くべきです.
Read more
注1:「閉じる」に関してであり「閉じるボタン」ではない.領域外タップを期待して「閉じる」を自前で実装していないということ.
注2:無駄な動きが増えれば増えるほど誤動作が起こる確率は上がります.シングルタップのつもりが勢いあまってダブルやトリプルに.この話では,開ボタンに「閉じる」があれば,わざわざ指を領域外に移動させる必要がなくなるじゃないでか!
注3:本来アップルが求めるUIは「領域外のタップで閉じる」を求めている.開いたボタンも領域外となるが,そのボタンが「開く」しか制御してなければ,「閉じる」を期待してそのボタンを押しても結局開くだけになる.純正のSafariやMailが規定通り閉じるのに,一部サードがそれ従わないというのはどうしたものか,というお話.
例えばUIActionSheetの場合,visibleを確認すれば,1つのメソッド(1つのボタンだけ)でUIActionSheetの「開く」と「閉じる」を制御できる.下記はその一例.ちなみに,UIActionSheetを複数の用途で使い回すときは,下記コードを少し加筆しないとユーザーには優しくないよ.
@interface HogeHoge : UIViewController
{
UIActionSheet *actionSheet;
}
@end
@implementation HogeHoge
-(IBAction)showActionSheet:(id)sender
{
if ( actionSheet.visible)
{
[actionSheet dismissWithClickedButtonIndex:-1 animated:YES];
return;
}
actionSheet = [[UIActionSheet alloc] ...];
[actionSheet showFromBarButtonItem:sender animated:YES];
}
@end
----------
勘違いされた方がいたので追記(9/12)
----------
簡単に言い換えると,(コード例を見ても分かると思うけど)ポップオーバーのトリガーになるボタンを開ボタンだけでなく開閉ボタンにしろということです.開ボタンと閉ボタンの二つにしろという話ではありません(セットは独立って意味じゃないだろ・・・).試しに,今お使いのブラウザの「ファイル」ボタン(なければ,それ相応のモノ)を押してメニューを開いてください.さらに,そのボタンを押してください.ちゃんと閉じますよね,このことです.このメニューが閉じなかったら,不便だと感じませんか?.「俺なんか毎回別の場所をクリックして閉じてるぜ!」なんて人は少ないと思います.
タップイベントのことは,ユーザーは必ず規定のアクションをするのか?って話と関連します.手ぶれなんかする人間はいない!,机だけでしか使わない!と思っているなら今すぐ開発を辞めた方がいい.人間の行動には必ず不確実性が伴います.シングルタップを意図しても,ダブルタップになることがあるため,“想定外の動作を引き起こす場合がある”と書きました.特にこの場合,開ボタンから別の位置に移動するための速度(加速度)が指に加わるので,その可能性は上がります.他にも動画を見てもらえれば分かりますが,ポップオーバー中はすべてのタッチイベントが停止するわけではありません.ただ閉じたいと思ったのに,他のボタンを触ってしまって,想定外のアクションが起こる(動画では別のポップオーバーが開く)のはナンセンスです.ユーザーすべて,子供,大人,老人,障害者,・・・,があなたのような思考やスキルを持っているわけではありませんし,あなたも「絶対に間違えることはない!」とは言い切れないでしょう.
アプリはXcodeでビルドしてケーブルを繋いだMacの目の前で操作するものではありません.持ち歩いたり,横になったりして操作すると,開発者でも思いもしない操作が起こります.あなたが,俺のアプリはどんなユーザーでも誤動作を絶対にさせない!,痙攣していれもシングルタップとダブルタップを区別できる!(極端の例ですが)と言いきるならば関係のない話ですが,相手が人間ならば,それは不可能です.誤動作を引き起こす可能性があるならば,(100%は無理ですが)その可能性を出来る限り取り除くべきです.
登録:
投稿 (Atom)

