Home > iPad Archive
iPad Archive
iPhone: EDAMTimestamp からNSDateを作る
ちょっと分からなかったのでメモ。
Evernote APIでEDAMNoteを取得して、ノートの作成日をNSDateにする方法。
EDAMNote *note がノートのデータ。
NSTimeInterval timestamp = [note created];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:(timestamp / 1000.0)];
timestampを1000.0で割るのを忘れて不思議な年月日になってたw
Tweet
- Comments: 0
- TrackBacks: 0
Happynoteセール中だよ
今年も震災などいろいろありましたが、何とか年を越せそうです。
感謝の気持ちを込めて、今日から3日間Happynoteを無料にセールしてみました。
よかったらダウンロードしてみてください。
Happynote 
カテゴリ: ライフスタイル
価格: ¥85
みなさん、良いお年を
Tweet
- Comments: 2
- TrackBacks: 0
iPhoneアプリ Happynote リリースしました
iPhoneアプリ Happynote ver1.0 リリースしました。(ブログに書くの遅いですけど)
今年の始めには出す予定だったのですが、地震やらなにやらで(言い訳)伸び伸びになっていたのですが、ようやくリリースできました。
Happynote 
カテゴリ: ライフスタイル
価格: ¥85
このアプリは、毎夜寝る前に、その日あった良かったことを3つだけ書き続ける 3 good things というメソッドを専用アプリにしたものです。欧米では"Never go to bed angry"という言葉があって、就寝前は必ずハッピーな気持ちで寝るという習慣を作ることはとても良いことです。このアプリがその一助になればと思います。
そして、意外と3つの良いことは見つからないものなんですね。2つまでは何とか探せるのですけど、3つ目が見つからないことが多いですw その3つ目を強引に何かこじつけで良かったことにする発想が大事なんだと思います。
英語のローカライズ原稿を、英会話を習って先生に見てもらったのですが、その際、このアプリの意図を即座に理解した様子をみて、このアプリは西洋向きなのだなと感じました。"Never go to bed angry"という言葉も彼女の口から出てきたもので、このアプリを一言で表した言葉だなぁと感心するとともに、西洋には生活に対するいろいろな考え方がより発展しているのだなと感じました。
実際、アプリの売れ方は(ほとんど売れていませんがw)欧米が半分以上になっています。USでは星5つのベタ褒めレビューが付いていてとても驚いたし、ちょっと怖かったですw。
主な機能としては、
- 記録した項目をランダムでアニメーション再生できる
- twitter,facebookへの投稿。メール送信
- CSVファイルのエクスポート
- 書き忘れ防止のためのリマインダー
などになります。
たまに自分過去に書いたことを、アニメーションで読み返すのですが、3.11の地震のことが書いてありました。「今日生きて夜をむかえられてよかった」って。
ビデオは近いうち作り直します。。
とりあえず、何もプロモーションしないとどうなるのかな、
という実験は身を以て理解しましたw
良かったら、どうぞお試しください。
追記:
財経新聞さまに取り上げていただきました!
http://www.zaikei.co.jp/article/20111213/89411.html
i-Stationさまに取り上げていただきました!
http://iphones.cx/news/3happynote/
ありがとうございます!
01/06追記 ブログに書いてもらいました!ありがとうございます。
Genie's Happy Life
3 good thingについては以下をどうぞ
就寝前の「3つのよいこと」メモ習慣
Tweet
- Comments: 0
- TrackBacks: 0
ハマッた。Application failed codesign verification. The signature was invalid, or it was not signed with an iPhone Distribution Certificate. (-19011)
今日のハマりどころ。 iOS5の話。解決に丸一日かかったw
Application failed codesign verification.
The signature was invalid, or it was not signed with an iPhone Distribution Certificate. (-19011)
これ。
Certification関係らしいのだけど。。。
ちなみに下記のエラーはグーグル先生が沢山情報を持っている。
Application failed codesign verification. The signature was invalid, or it was not signed with an Apple submission certificate. (-19011)
こちらは、Distribution なのに、Developer Provisioningファイルが使われている場合のエラー。
今回、何度となくDistribution CertificateをRevokeして、再度リクエストしてを繰り返しましたが結果は変わらず。しかも、Xcode上のオーガナイザーからリフレッシュするとDistributionのProvisioningだけ消えちゃう現象が起こっている。(今も解決していない。Xcode4.2のバグかな?)だから、余計にCertificateに問題があるように思えるのだけど。
結論から言うと、Entitlement.plistにあるiCloudの項目が有効になっていることが原因でした!ターゲットのSummaryからEntitlement.plistのチェックボックスを有効にすると自動でEntitlement.plistが作られますが、iCloudの項目も勝手に追加されるみたい。iCouldの項目を削除したら、あっさりPassed Validationとなったw
昨日のiconの件といい、Entitlement.plistの件といい、全て見落としといえばそうなんだけど、知らないと気がつくまで時間がかかるわ、これ。
Tweet
- Comments: 0
- TrackBacks: 0
Icon specified in the Info.plist not found under the top level app wrapper:
"Icon specified in the Info.plist not found under the top level app wrapper:"でむっちゃ悩みました。
iOS4時代では、info.plistのIcon filesに記載した文字が、大文字にしていない、とか、スペルミスが原因でこのエラーが出ていたみたいですが、
iOS5ではIcon files(iOS5)に問題が隠されていました。
というか気付かなかった。数時間悩みましたよ。ほんと。
対処法は、
Icon files(iOS5) > Primary Icon > Icon files のitemを確認すればよい。
プロジェクトのSummaryタブでApp Iconにドラッグとかでファイルを追加すると、Item0に空の項目が入るみたい。これを削除すれば解決。
それと、もう一つ、同じ項目で
Icon files(iOS5) > NewsstandIcon が勝手に追加されているときもあるみたい。
これまた、Newsstand App=true にしろとエラーが困る原因。
こちらは、単純にNewsstandを使わないのなら、その項目を削除すれば良いだけ。
ということで、個人アプリを初めてSubmitしてみました。
リリースが決まったら、ブログでお知らせします。
Tweet
- Comments: 0
- TrackBacks: 0
iOS5でアプリケーションアイコンの光沢を消す
iOS5専用のアプリを作っていて、
今まで通り、info-plistにIcon already includes gloss effect を
追加してYESにしていたのだけど、一向に光沢が消えなかった。
info-plistをよく見てみると、Icon filesとIcon files(iOS5)という2つの項目があったw
iOS5でアイコンの光沢を消すには、
Icon files(iOS5) > Primary Icon > Icon already includes gloss effect をYESにする。
Tweet
- Comments: 0
- TrackBacks: 0
iPhone NSString/CFStringRef の変換
ちょっと分からなかったので調べてみた。
つうかキャストするだけだったw オゥ
NSStringからCFStringRefに変換
CFStringRef aCFString = (CFStringRef)aNSString;
CFStringRefからNSStringに変換
NSString *aNSString = (NSString *)aCFString;
参考サイト
How to convert CFStringRef to NSString?
それと、4月には完成していたアプリが先日リリースされましたw
ClipCM oneといいます。
1枚の写真からテキストやフレームをつけてGIFアニメを作るアプリです。
無料なのでDLしてみてください。
1枚写真で作れるClipCM one 
カテゴリ: ライフスタイル
価格: 無料
あと、地味にClipCMもバージョンアップしています。
新しいプラグインが3つ追加になっています。
Tweet
- Comments: 0
- TrackBacks: 0
iPhone UIScrollViewで画面サイズより小さい領域でPagingする
新しいiMac買いました。メモリも安いので買いました。
でも雪豹のまま使うことにしますw
さて、UIScrollViewは便利で良く使っています。
UIScrollView.pagingEnabled = YESにすれば、ページ毎にきちっとスナップしてスクロールしてくれます。でも、画面サイズ(W:320px)より小さい要素、例えば画像(W:150px)などをページングするところでハマりました。iPhoneのサファリのタブのようにしたいのです。
ポイントは、ページングはframeのサイズではなくてboundsのサイズということ。
それと、scroll.clipsToBounds = NOにすること。NOにしないと、1枚しか見えない。
なるほど!
例えば、横は150pxの画像とマージンを取ったサイズを1ページとした場合。
UIScrollView *scroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 200.0)];
scroll.bounds = CGRectMake(0.0, 0.0, 150.0 + margin, 200.0);
scroll.contentSize = CGSizeMake(150.0*3 + margin*3, 200.0);
scroll.pagingEnabled = YES;
scroll.showsVerticalScrollIndicator = NO;
scroll.showsHorizontalScrollIndicator = YES;
scroll.clipsToBounds = NO;
scroll.delegate = self;
[self.view addSubview:scroll];
これだと、ユーザのタッチ受付の領域が狭いので、hitTestとかで広げるとよいかも。
以下、参照記事。
UIScrollView horizontal paging like Mobile Safari tabs - Stack Overflow
あと、はじめてUIPageControl使ったので、メモ。
UIPageControlはユーザタッチを受け取るのでタッチすると、ドットが1つ移動します。
プロパティのcurrentPageで左右どちらへ移動したか分かります。
また、タッチがあったことを受け取るには、
[UIPageControl addTarget:self
action:@selector(pageControlDidChange:)
forControlEvents:UIControlEventValueChanged];
をセットしておいて、メソッド内で、currentPageの位置へ下記のようにscrollViewを移動すればOK。
[scrollView setContentOffset:point animated:YES];
Tweet
- Comments: 0
- TrackBacks: 0
Xcode4 "No Packager exists for the type of archive"でipaファイルが作れない場合
iMacを勢いでらいおん様にしてしまい、Xcodeは3を使っていたのだが、ついにXcode4に移行するときがきました。今までちろちろ遊びでは使っていたのですが。。。
そして、いざXcode4で今まで開発していたプロジェクトをAdHocビルドしてみると、Archiveは完了するのだが、"No Packager exists for the type of archive" と出てipaの作成ができない。かなり焦った。
でも普通にAdHocビルドできるXcode3で作ったプロジェクトもある。何コレ。
グーグル先生に聞いてみたところ
Stackoverflowに回答がありました。助かりました。
この状態になるのは、ライブラリなど外部のリンクファイルを使っている場合のようです。自分のアプリでもGDataを使っていたのでそれがひっかかっていました。
解決法は、使用しているライブラリのプロジェクト(ボクの場合はGData)のBuild settingsのSkip InstallをYESにすること。ただし、メインのプロジェクトの方はそのままBuild settingsのSkip InstallはNOのままでOKとのことです。
これで、無事AdHocできました。ふ〜。
XCode4 + iOS 4.3: "No Packager exists for the type of archive"
あと、らいおん様にXcode3を共存させようと、一度削除して再インストールしたら正常にインストールできませんでした。ApplicationフォルダにUtilityフォルダしか作られない。。何度やってもダメでした。
Tweet
- Comments: 0
- TrackBacks: 0
iPhone アプリに空きメモリを表示する
アプリ起動中に端末の空きメモリを表示するクラスを作ったので一応アップしておきます。
元ネタのまま利用させてもらいました。
#include < mach/host_info.h >
#include < mach/mach_init.h >
#include < mach/mach_host.h >
//MBで返す
-(float)freeSize
{
struct vm_statistics a_vm_info;
mach_msg_type_number_t a_count = HOST_VM_INFO_COUNT;
host_statistics( mach_host_self(), HOST_VM_INFO, (host_info_t)&a_vm_info ,&a_count);
return ((a_vm_info.free_count * vm_page_size)/1024.0)/1024.0;
}
UIViewのサブクラスにしています。AppDelegateでUIWindowへaddSubviewすると最前面にきて良いと思います。
スマートなやり方が分からないので内部でタイマーを使って空きメモリの値を更新しています。(現状は1秒間隔です)ですので、アプリがバックグラウンドへ行くときや、戻ってきたときにタイマーを制御してください。
-(void)memoryCheckStop; //タイマー止める
-(void)memoryCheckStart; //タイマー進める
元ネタはこちらです
http://d.hatena.ne.jp/It_lives_vainly/20090325/1237952703
Tweet
- Comments: 0
- TrackBacks: 0
iPhone Objective-Cで構造体を配列や辞書に登録
ちょっと分からなかったのでメモ。
AVFoundationで画面を連続キャプチャしている際に、CMSampleBufferRef型のデータを一時的に配列へ保管したかったので調べてみました。
NSValueに構造体を入れればよかったのですね。
CMSampleBufferRef imageDataSampleBuffer;
// CMSampleBufferRefをNSValueにする
NSValue *sample = [NSValue value: &imageDataSampleBuffer
withObjCType:@encode(CMSampleBufferRef)];//CMSampleBufferRefに戻す
CMSampleBufferRef imageDataSampleBuffer;
[sample getValue:&imageDataSampleBuffer];
アップルのドキュメントは以下です。
http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/NumbersandValues/Articles/Values.html
Tweet
- Comments: 0
- TrackBacks: 0
iPhone SDK ターミナルでデバッグ
iPhoneをXcodeにつないでいない時にのみ起きる不思議クラッシュ現象。
なぜかシミュレータでの操作や、Xcodeから実機に直接「ビルドと実行」してデバッグを行ってもクラッシュは起きない。実機にインストール後、アプリを起動した場合のみクラッシュする現象に遭遇しました。(まぁ通常はこの状態で動作するのが正常な訳ですが。。。)
XcodeのデバッグコンソールからNSZombeが出すメッセージもなく、クラッシュするので困っていました。オーガナイザには当然クラッシュログは残っているのですが、
1 myapp 0x00020d80 0x1000 + 130432
とこんな感じなのでどこが問題なのか正確に理解できない。
stackoverflowに良い解決法が載っていました!
Crashing app when device not connected to Xcode
やり方は、ターミナルを使って、「0x00020d80」がどこを差しているのか分かれば解決できると。
まず、ターミナルでデバッグしたいプロジェクト内にあるbuildディレクトリへ移動。
そこで、以下のコマンドを入力。
atos -arch armv6 -o myapp.app/myapp 0x00020d80
すると、ターミナルがクラッシュしたクラスとメソッド、および行数を教えてくれます。
助かったぁー、オブジェクトをリリースするタイミングの問題でした(汗
Tweet
- Comments: 0
- TrackBacks: 0
iPhone UIPickerView のラベルのフォント変更
iPhoneでUIPickerViewを使ってシステムのフォント一覧を表示します。
せっかくフォントを表示するので、各ラベルのフォントも表示するフォントに合わせようと思ったら少々迷ったのメモします。
通常ですと、UIPickerViewのdelegateメソッドは
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
-(NSInteger)pickerView:(UIPickerView*)pictView numberOfRowsInComponent:(NSInteger)component
-(NSString*)pickerView:(UIPickerView *)pictView titleForRow:(NSInteger)row forComponent:(NSInteger)component
の3つですが、これですとNSStringしか返せません。
ですので、3つ目のメソッドは
- (UIView *)pickerView:(UIPickerView *)pictView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView*)view
を使うと、画像などUIView(UILabel)が使えます。
システムのフォント一覧を表示する場合は以下のようになります。
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *family = [[UIFont familyNames] sortedArrayUsingSelector:@selector(compare:)];
familyNames = [[NSMutableArray alloc]init];
for ( id familyName in family ) {
NSArray* fonts = [[UIFont fontNamesForFamilyName:familyName] sortedArrayUsingSelector:@selector(compare:)];
for (NSString *name in fonts) {
[familyNames addObject:name];
}
}
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}
-(NSInteger)pickerView:(UIPickerView*)pictView numberOfRowsInComponent:(NSInteger)component{
return [familyNames count];
}
/* フォント名のみ返す場合
-(NSString*)pickerView:(UIPickerView *)pictView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return [NSString stringWithFormat:@"%@", [familyNames objectAtIndex:row]];
}
*/
//UILabelで返す場合
- (UIView *)pickerView:(UIPickerView *)pictView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView*)view{
NSString *fontname = [NSString stringWithFormat:@"%@", [familyNames objectAtIndex:row]];
UILabel* fontlabel = (UILabel*)view;
if (!fontlabel) {
fontlabel = [[[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, ([pictView rowSizeForComponent:component].width - 8.0f), [pictView rowSizeForComponent:component].height)] autorelease];
fontlabel.adjustsFontSizeToFitWidth = YES;
fontlabel.backgroundColor = [UIColor clearColor];
}
fontlabel.text = fontname;
fontlabel.font = [UIFont fontWithName:fontname size:[UIFont labelFontSize]];
return fontlabel;
}//ピッカーで取得 labelというUILabelへ選んだフォントを表示しています。
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSString *pickFont = [familyNames objectAtIndex:[thePickerView selectedRowInComponent:0]];
label.font = [UIFont fontWithName:pickFont size:[UIFont labelFontSize]];
label.text = pickFont;
}- (void)dealloc {
[familyNames release];
[super dealloc];
}
Tweet
- Comments: 0
- TrackBacks: 0
iPhoneでFacebookへの対応 (photo upload)
iPhoneアプリで、写真共有サイトへのアップロードが必要になり
テストでいくつかプロジェクトを作成してみました。
facebookへの写真アップロードの部分でつまづいたのでメモです。
まず、facebookはiOS用のSDKは以下で配布されています。
https://github.com/facebook/facebook-ios-sdk
開発者登録、アプリ登録も必要です。
http://www.facebook.com/developers/createapp.php
組み込み方法はFacebookのdeveloperページにあります。
http://developers.facebook.com/docs/guides/mobile/
その他、参考にしたサイト。超簡単Facebook実装
http://www.slideshare.net/MakotoIto/facebook-6054768
僕は、自分のプロジェクトにsrcフォルダをコピーして、
facebook-ios-sdk.xcodeprojを立ち上げて、FBConnectフォルダを自分のプロジェクトへドロップしました。
SDKのサンプルフォルダにあるDemoAppを見れば大体作りが分かると思います。
自分のプロジェクトの場合は
1.自分のcontrollerに #import "FBConnect.h" する。
2.app idを入力する static NSString* kAppId = @"***********";(15桁の数字)
3.info.plistに URL Types > URL Shcemes に "fb" と 上記のapp idを加えた文字列を入れる
あと、忘れてはいけないのは、
自分のプロジェクトのappDelegateに下記を入れる。
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [[controller facebook] handleOpenURL:url];
}
これが入っていなくて、
The operation couldn't be completed. (facebookErrDomain error 101.)
というエラーで悩みました。
同じapp idで Demoでは動くのに、自分のプロジェクトで動かないことになっていました。
しかもInvalid API key となるので、謎でした。
写真アップロードに関して。
キャプションをつけて写真をアップロードしたい場合は、
paramsに@"caption"の項目を追加すればよいです。
グーグル先生では@"message"となっているのですが、これでは反映されません。
-(void)upload{
UIImage *img = [UIImage imageNamed:@"img.jpg"];
//キャプション入れる時
NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
img, @"picture",
@"ここにキャプションをいれる", @"caption", nil];
[_facebook requestWithMethodName:@"photos.upload" andParams:params andHttpMethod:@"POST" andDelegate:self];
}
あと、アプリを毎回ログインさせない方法は模索中です。。
Tweet
- Comments: 2
- TrackBacks: 0
iPhone UILabel 高さをテキストの量で決める
UILabelに量が可変するテキストを流し込む時など、
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode
を使うと高さが分かるので便利です。
TEXT_SIZE に使用するフォントサイズ
TEXT_WIDTH にUILabelの横幅
を設定しておけば、文字列を渡せば高さが帰ってきます。
#define TEXT_SIZE 14.0
#define TEXT_WIDTH 230.0
-(float)textHeight:(NSString*)text{
CGSize boundingSize = CGSizeMake(TEXT_WIDTH, CGFLOAT_MAX);
//文字の横幅から高さを算出
CGSize labelsize = [text sizeWithFont:[UIFont systemFontOfSize:TEXT_SIZE]
constrainedToSize:boundingSize
lineBreakMode:UILineBreakModeWordWrap];
return labelsize.height;
}
Tweet
- Comments: 0
- TrackBacks: 0
iPhone/iPad @protocolで自前のDelegate
やっと、@protocolを自前で実装するやり方が分かったのでメモ。初歩的ですが。
今までというか、protocolを使う前は、初期化の時にdelegateととして呼び出し元のインスタンスを渡していました。
例えば、こんな感じ。
id delegate;(.hで変数宣言)
-(id)intWithDelegate:(id)del;
それでインスタンスを作成する時に
object *obj = [object alloc] initWithDelegate:self];
とやっておいて、呼び出し元へアクセスするときは、
performSelectorを使っていました。
[delegate performSelector:@selector(imgDidFinish:) withObject:data];
これでもいいとは思うのですが、スマートではないのかもしれません。
そこで、protocolを使ってみます
まず、ヘッダー。UIViewControllerクラスを使った場合。
UIImagePickerを使って画像選択して、トリミング終了後にdelegateで戻ってくるイメージです。
ImgSelectControllerというクラスの
-(void)imgDidFinish; (作業終了後に呼ばれる)と
-(void)imgSelectCancel; (作業キャンセル時に呼ばれる)
がdelegateメソッドになります。(今回関係ない変数、メソッドなどは省略しています)
#import <UIKit/UIKit.h>
@protocol ImgSelectControllerDelegate;
@interface ImgSelectController : UIViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate> {
id <ImgSelectControllerDelegate> delegate;
}
@property (nonatomic, assign) id<ImgSelectControllerDelegate> delegate;
@end
@protocol ImgSelectControllerDelegate <NSObject>
@optional
-(void)imgDidFinish:(UIImage*)image;
-(void)imgSelectCancel;
@end
@interface前に@protocol ImgSelectControllerDelegate;を宣言して
変数 id <ImgSelectControllerDelegate> delegate; とプロパティの
@property (nonatomic, assign) id<ImgSelectControllerDelegate> delegate;
を宣言する、
後は、delegateメソッドを記入する。
.m ファイルの方では、@synthesize delegate; 追加しておく。
#import "ImgSelectController.h"
@implementation ImgSelectController
@synthesize delegate;
- (id)initWithID:(int)num media:(int)photo{
self = [super init];
if (self != nil ){
myID = num;
mediaNum = photo;
}
return self;
}//画像選択ピッカー
-(void)openPhotoLib{
UIImagePickerControllerSourceType souceType;
//カメラ使用可能か
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
if (mediaNum == 0) {
souceType = UIImagePickerControllerSourceTypeCamera;
}else {
souceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
}else {
souceType = UIImagePickerControllerSourceTypePhotoLibrary;
}
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = souceType;
[self presentModalViewController:picker animated:YES];
[picker release];
}//画像選択後の処理
-(void)imagePickerController:(UIImagePickerController*)picker
didFinishPickingMediaWithInfo:(NSDictionary*)info
{
//モーダルを戻す
[self dismissModalViewControllerAnimated:YES];
//選択した画像の取得
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
//===ここでトリミングなどの処理をして===//
//処理完了後、デリゲート先へ通知
if ([delegate respondsToSelector:@selector(imgDidFinish:)]) {
[delegate performSelector:@selector(imgDidFinish:) withObject:image];
}
}//画像選択キャンセル
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{
//デリゲート先へ通知
if ([delegate respondsToSelector:@selector(imgCancel)]) {
[delegate performSelector:@selector(imgCancel)];
}
}- (void)viewDidLoad {
[super viewDidLoad];
[self openPhotoLib];
}- (void)dealloc {
[super dealloc];
}
@end
.mは大分処理を端折っています。。。
これらを使う場合は、使用するクラスで、
普段使うDelegateと同じで
.hの
@interface UIViewController : UIViewController <ImgSelectControllerDelegate>
にprotocol <ImgSelectControllerDelegate> を追加
.mの方で、
ImgSelectController *imgSel = [[ImgSelectController alloc] init];
imgSel.delegate = self;
として、メソッドを実装すればdelegateが使えます。
Tweet
- Comments: 0
- TrackBacks: 0
iPad ModalView表示の時、キーボードが隠れない
- 2010年12月16日 16:27
- iPad
iPadのMordalViewを表示中に、[UITextField resignFirstResponder]でキーボードが隠れなくなる話。
どうも、modalPresentationStyleをUIModalPresentationFormSheetに設定した場合、キーボードを表示すると、起こるらしい。
UIViewController *b = [[UIViewController alloc] init];
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:b];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:navigationController animated:YES];
[navigationController release];
[b release];
この状態で、UITextFieldへbecomeFirstResponderしてキーボードを表示する。
キー入力終了後に[UITextField resignFirstResponder]してもキーボードは隠れない。
MordalViewを閉じる時にはキーボードは一緒に隠れる。
これはバグではないらしい。
http://stackoverflow.com/questions/3372333/
で、下記を参考にしたら、対処できました。(でもリジェクト)
追記 2011.1.24 以下はPrivate APIなのでリジェクトになるようです。
スミマセン。。。コメントありがとうございました。
iOS4.3では
[UIViewController disablesAutomaticKeyboardDismissal]
というメソッドが追加されるようです。さて、それ以下のOSにはどう対処しようかしら?
[myTextField resignFirstResponder];
@try
{
Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
[activeInstance performSelector:@selector(dismissKeyboard)];
}
@catch (NSException *exception)
{
NSLog(@"%@", exception);
}
http://stackoverflow.com/questions/2762251/how-to-hide-the-ipad-keyboard-from-a-modal-view-controller
Tweet
- Comments: 2
- TrackBacks: 0
iPhone等で再生するm4vへのファイル変換
アプリのスプラッシュムービーにm4vファイルを使いたいことがあると思います。
変換面倒くさいなあと思っていたのですが、iTunes使えば簡単でしたね。
QTやAviなど動画ファイルを用意します。
動画ファイルをiTunesへドロップ。
ムービー一覧を開いて、変換したいファイルを選択。
メニューの「詳細」から「iPod/iPhoneバージョン作成」または「iPad/AppleTVバージョン作成」
ムービー一覧に変換されたファイルが現れるので、右クリックで「Finderで表示」
でm4vファイルがゲットできます。
携帯変換君とか使う必要は全然なかったですね。。
Tweet
- Comments: 0
- TrackBacks: 0
Twitter告知での計測結果だよ(T-T)
iPadお触りする会で実験したこと。
iPadの期待度とTwitterでのみの告知して、
福島でどれぐらいの人が集まるものなのか? 実験してみました。
予想よりは遥かに寂しい結果となりました。。。
何かの役に立つか分かりませんが一応共有しておきます。
5/14(金)16時ごろ twitter にてツイート。
自分@hiranodept のフォロワー数は80。
その他RTしてくれた方々のフォロワー数
@BUN さん 910
@makotone さん 390
@acqua8 さん 193
@syoh_xxx さん 1137
@teruteru1950 37
(みなさんありがとうございました)
その他、概要説明 ブログ
http://www.hirano-dept.com/blog/2010/05/ipad-1.html
Google Analytics 上記ページ:5/14-5/16
アクセス数:60 (14日:36回 15日:15回、 16日:9回)
当日来場者数:8名(うち子供2名、 関係者4名)
以上のような結果となりました。
さあ、ここから何が見えてくるでしょうか。。。?
5/14の午前に突然思い立って行動してみたという、無計画ぶりもさることながら
そんな中、twitterでの僕の発言をいち早くキャッチしてくれ、
@acqua8さんは 自ら会場の手配してくれたり、
@BUNさん@makotoneさんは積極的にRTして頂けたり、
自分一人の力ではできないことを自発的行動していただきました。ありがたや〜
すでに予定があり、実際来たくても来られなかった方や、
このお知らせツイートに気づいた時には、会はもう始まっていて来れなかったりと
そのようなツイートをのちにいくつかみることもできました。
まぁ、ツイートするタイミングはとても重要のようです。(当たり前!)
そんな状況でも見に来て体験していただけた方がいたということは
大変ありがたい話しで、驚きであるかもしれません。
Tweet
- Comments: 0
- TrackBacks: 0
【iPadが郡山にくるよ!】
- 2010年5月14日 16:41
- iPad
突然ですが、
【iPadが郡山にくるよ!】と題して iPadお触りする会を開催しますよ。
日時:平成22年 5月16日 (日)13時〜15時
場所: 郡山地域テクノポリスものづくりインキュベーションセンター 会議室(MAP)
今月末には日本でもiPadが発売されます。
発売前に触ってみたい方はぜひ遊びに来てください。
ちなみに無料です。
お触りしたいアプリなどありましたら、#iPad_fukushima でツイートしてください。
可能な限りインストールしておきます。
お問い合わせはメールで:
hirano@hirano-dept.com
Tweet
- Comments: 0
- TrackBacks: 0
Home > iPad Archive
- Profile
-
iPhone/iPad開発・web制作・映像制作をしている平野百貨店の店長個人の覚書です。
ご意見・ご感想などお問合せはコチラからどうぞ。 - Search
- iPhone Apps
- MyBook Shelf
- RSS
- リンク