iPhoneはretainとreleaseの扱いを間違えるとすぐに落ちる。
ウザイ。 なので、落ちる確率を限界まで減らす画期的 Retain の管理方法を考えた。
まず、辞書を作る。
NSMutableDictionary *retainDict = NSMutableDictionary alloc] initWithCapacity:10];
んで、アプリの途中に勝手にリリースされたくないモノは、retain せずに全部辞書に突っ込む。
これでOK。完璧。
deallocのタイミングで辞書を開放すれば、辞書に登録した全てのオブジェクトも開放される。 なんというスマートな実装。
クラスの発注とか国内、海外でやってる人いないかなぁ。
UIScrollView および UIImageView を拡張して、
センター揃えで、2400px の画像を(iPhone のディフォルトのアルバム的に)正しく表示できるクラス。
ページングはいりません。
発注者、開発者は同クラスを各人の個人プロジェクト、受注プロジェクトで使える権利を有す。
開発者は同クラスをオープンソースでの公開や、第三者への譲渡、再販売の権利を有す。
iPhoneの通常のUIScrollViewはスケールの基準軸が左上でうざい + UIImageView はデカイ画像を保存できない。ここら辺のクラスは需要があるので、いっぱつ受注してみんなで共有するとハッピーなんじゃないかと思う。
これぐらいの条件だと、おいくらぐらいになるのだろう。
はてなで、また1万ポイントの質問を立ました。
iPhoneアプリの審査でリジェクトを食らった事例をお教えください。
http://q.hatena.ne.jp/1231517350
みんなでリジェクトの情報を共有することで、
開発は大分スムーズになると思うのです。
みなさまお誘いあわせのうえ、情報をご提供ください。
UIViewを拡張したFLDViewを作成しました。
ディフォルトのsetCenterに加えて、setLeft, setRight, setTop, setBottom等や、setX, setWidth といった座標系の拡張セッターを大量に追加してあります。
海外進出同盟を作る為に、ToyCamera他でえたノウハウを色々フィードバックすると約束したので、とりあえずクラス公開とか。
UISegmentedControllerが個人的にウンコだと思ったので、ラジオボタン代替物としてFLDRadioGroupを作成しました。
http://fldkit.googlecode.com/svn/trunk/FLDRadioGroup/
FLDRadioGroup *group = FLDRadioGroup alloc] init]; [group addButton:myButton0]; [group addButton:myButton1]; [group addButton:myButton2]; group.delegate = self; [group setSelectedIndex:2]; -(void)radioGroup :(FLDRadioGroup*)group didSelectedButton:(UIButton*)button atIndex:(int)index { NSLog(@"Button selected"); }
みたいな感じ。 UIButtonにはスキンをあててSelectedで外見が変わるようにしておいてください。
通常のボタンを addButton していくことで、ラジオボタンのグループとしてしようできるようにするクラスです。
これだとビューのデザインを管理しやすいです。ご利用は自己責任でご自由に。問題点改善点があったら連絡くれるとうれしいです。
手始めにセグメンテッド・コントロールの代替物として FLDRadioGroup とかを作る。 FLDはfladdictの接頭語ね。
挙動的にはUIButtonサブクラスを addButton で登録することで、ラジオボタンとして使えるようにする。
メソッド的には以下のような感じかな。
-(void)addButton:(UIButton*)theButton;
-(void)removeButton:(UIButton*)theButton;
-(void)removeAllButtons;
-(void)setSelectedIndex:(int);
-(int)selectedIndex;
-(void)setSelectedButton:(UIButton*);
-(UIButton*)getSelectedButton;
addButtonに引数として data とかをつけて、データと関連付けられるようにするかが悩みどころ。
そこはDictionaryでユーザが自力でやるほうがいいのかな。
んでdelegatedeに
-radioGroup:(FLDRadioGroup*)group didSelectedButton:(UIButton*)theButton;
とかがあればいいんじゃないかなと思う。
はっきりいって、iPhoneのUIhogehoge系のコンポーネントは、実装が微妙なものがある。
特にスライダー、セグメンテッド・コントロール、ピッカーは正直なんとかしたい。
スライダーは自力実装しなおしたほうがよさげかもしれない。 セグメンテッド・コントロールもこれのかわりに、UIButtonを複数登録して使用するラジオ・グループ的なものを作ったほうがよさそう。
時間があるときにボチボチと実装していこうかなぁ。
n85確かにSliderは反応が今ひとつですよね。
Segmented..もおっしゃる通りですね。縦にして使いたいという人も検索していたら見かけました。あと、セグメントの数が2つだけだと、どちらをタップしても選択が移動してしまいます(そもそも2で使うのが間違っているんでしょうか?)。
Pickerはそれほど使いにくいということもないのではないかと思うのですが、どの辺りに使いにくさをお感じになったのか、お聞かせいただけるとうれしいです。
fladdictPickerはその機能のシンプルさにくらべて、UIの画面占有範囲が馬鹿でかいというのが1つ。
ピッカーを表示して、それから値を決定するっていう、2タップ以上の操作が必要な点がもう1つ。
その2点がやだなぁと。
FLDRadioGroupDelegare->FLDRadioGroupDelegate
あと、デリゲートを呼ぶ前に、メソッドを実装してるかチェックした方がいいと思います。
実装してないときに落ちてしまうので。
if ([delegate respondsToSelector: @selector(operationShouldProceed)]) {
[delegate operationShouldProceed];
1. Delegate とかで使われてる「didSelected」は「didSelect」では?
2. removeButton と removeAllButtons でアクションを削除してる部分は removeTarget:action:forControlEvents: の方が適切な予感
3. index 系の型指定は int じゃなくて NSUInteger の方がよさげ
4. setSelectedIndex で objectAtIndex する前に範囲チェックした方が良いと思う
5. setSelectedButton では button が buttons に含まれるかチェックした方が良いと思う
>yossy44
ご指摘ありがとうございマス!!
もろもろ修正して再アップいたしましたーー!