Home > Archives > 2010年4月 Archive

2010年4月 Archive

iPhone MPMoviePlayerController再生中にタッチイベント取得してスキップさせる

  • Posted by: goron
  • 2010年4月28日 18:07
  • iPhone

アプリ起動時に、ムービーを表示していて、タッチしてスキップさせる方法がやっと分かりましたのでメモしておきます。
そもそも、MPMoviePlayerController の movieControlMode = YES にしておけばコントローラが出て「完了」ボタンを押せばよい話ですが、このコントローラを出したくないとき(movieControlMode = NO)に使えるのではないでしょうか。

参考にした書籍:iPhoneSDK開発のレシピ

今回はMPMoviePlayerController の上にUIViewを貼付けて、UIViewでタッチイベントを拾うようにします。

まず、起動時にムービーを表示させるのは、下記等を参考にしてください。
[iPhone] メディアプレイヤーで動画再生

ポイントは、keyWindowを取得して、それにUIViewをaddSubviewすることでした。
このkeyWindowの取得方法がなかなか分からなかった。。。

自分が試した方法は、ムービーがプリロードを完了した
- (void) finishPreload:(NSNotificationCenter *) aNotification
が呼ばれた時、MPMoviePlayerController の再生メソッドを呼んだ後にUIViewを作成しaddSubviewする。
(再生メソッドを呼ぶ前だとUIViewがムービーの背面に位置してタッチイベントがとれませんでした)

具体的には


- (void) finishPreload:(NSNotificationCenter *) aNotification {
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerContentPreloadDidFinishNotification object:player];
[player play];

//ムービースキップ用のUIView --SkipView
//SkipView にはタッチイベントを取得して、ムービー停止を呼ぶメソッドがある
skip = [[SkipView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 480)];
UIWindow *movieWindow;
movieWindow = [[UIApplication sharedApplication] keyWindow];
[movieWindow addSubview:skip];
[skip release];
}

[[UIApplication sharedApplication] keyWindow]でkeyWindowを取得してaddSubviewする。
SkipViewがタッチを取得したら、[player stop] を呼んで、画面遷移すればOK。

書籍では、UIViewを90度回転させていますが、回転させなくても問題ありませんでした。

ちなみに、ムービーは横位置(landscape)で再生されるのですが、縦位置(portrait)で再生したい場合は-90度回転させたムービーを作成すればよいです。(気がつくと当たり前なんですけど。。結構悩んだ)



iPhone UIImageViewのアニメ

  • Posted by: goron
  • 2010年4月22日 22:59
  • iPhone

ちょっとした気づき。
UIImageViewへUIImageの配列を渡すと、コマアニメしてくる。animationImagesプロパティ。
あまり高速ではないけど。


NSArray *imgset =[NSArray arrayWithObjects:img1,img2,img3,nil];
UIImageView *imgView = [UIImageView alloc]init];
imgView.animationImages = imgset;
imgView.animationDuration = 2.0;

とすると、2秒でimgset配列の3枚の画像を再生してくれる。
各画像の秒数を細かく設定はできないみたい。

[imgView startAnimating];
でアニメスタート

[imgView stopAnimating];
でアニメ停止

imgView.animationRepeatCount = 1;
とすると、1回再生して終了。

RepeatCountを設定すると、設定回再生すると最終フレームで止るのかとおもいきや、
画像は消えちゃう。例えば、最終フレームをそのままフリーズさせておきたい場合は、
imgView.image = UIImage 最終フレーム画像
をセットしておけばよい。これに気づくのに時間がかかった。。。


おまけのCore Animation
レイヤーでアニメーションの設定して、アニメーション終了後にレイヤーの状態が
初期状態にもどるため、画面が一瞬フラッシュするようになる。
(メモリが不足してもそうなるみたい)

CABasicAnimation.removedOnCompletion = NO;
CABasicAnimation.fillMode = kCAFillModeForwards;

上記の2つの設定をいれないと、パカっとなります。
CATransform3DMakeRotation等使うとよく分かります。



iPhone UIImageの合成 と 複数のMacで共有できる証明書の書き出し

  • Posted by: goron
  • 2010年4月16日 15:31
  • iPhone

今日はiPhone関連で2つためになったこと。

まず、UIImageの合成。
下記は参考サイトです。下記はUIImageViewを使っています。
create one UIImage from two UIImageView.

image1 は下になる画像です。
image2 はアルファチャネルを持った画像です。
それら2つを合成してresultingImageという合成画像を作ります。
ちなみに両方の画像サイズは一緒のものを想定しています。

imageViewはUIImageView で合成した画像を表示する。

UIGraphicsBeginImageContext(image1.size);  
CGRect rect = CGRectMake(0, 0, image1.size.width, image1.size.height);
[image1 drawInRect:rect];  
[image2 drawInRect:rect blendMode:kCGBlendModeNormal alpha:1.0];  
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext();  
[imageView setImage:resultingImage];


ポイントは、
drawInRect:blendMode:alpha:
ですね。blendModeは様々あるので調べてみてください。


そして話しは変わって、先日AdHocで配布したファイルがインストール出来ない謎な現象が発生。残り1週間を切ったdeveloper programではあったけど、なぜか使えなくなったみたい。
なんで〜? プログラムを更新したら問題無くなりました。更新は早めにということですか?

普段はiMacで開発をしていますが、MacBookProを買ったのでノートでも移動時などに開発できればいいなぁと思って、iPhone Provisioning PortalからCertification等々DLしてインストールしてみましたが、使えませんでした。グーグル先生に聞いても分からなかったのですが、教えてもらいました!

キーチェーンアクセスに登録されている証明書を右クリック。
「書き出す」という項目があるので選択。
書き出しファイルを保存するので「証明書.p12」ファイル名で
フォーマットは「個人情報交換(.p12)」で保存。
書き出したファイルを別のマシンにインストールすれば、ビルドできました!


iPadから投稿

  • Posted by: goron
  • 2010年4月15日 00:29
  • iPhone

iPadから投稿してみるナリ。
MTの管理画面にログインしてみるとIMTプラグインのページになる。(iPhoneからも投稿できるプラグイン)
意外と書きやすかもです。寝転がりながらキーボードを打つ感じのスタイルになりますね。

先日、打ち合わせにでかけた際、思いがけずiPadを入手できました。白河では第一号かな?
そして今日、アップルから日本でのiPad発売延期の発表があり、とてもラッキーだったことに感謝しました。
2週間程度のアドバンテージが1月半に伸び、これを生かさない手はないと思ってはいるのですが。。。

今日はiPad用のアプリをせっせと購入してみました。
まだまだUS iTumesアカウント限定のアプリばかりなのでなかなか良いアプリには巡り会えていません。
購入したアプリは、
Magic Piano これはおすすめ。iPhoneで楽器演奏よりは遥かに操作性も良いし楽しい。
TIMES 将来の雑誌の形かな?
Marvelのコミックビューアー スパイダーマンDLした。
Beatiful Planet fod iPad これはよくわからない。
NPR ニュースビューアー
Epicurious レシピ集かな
その他フリーのもの

手書きアプリや、マンダラートのiPad版が僕は欲しいです。
アイデア帳が、iPadは向いている気がします。

まだまだ自分にはiPadの使い道が見えてこないのですが、今後に期待が持てるデバイスだと思います。
でもiPadでYouTubeを見るようになりました。なんでだろう。


iPhone UITextView 改行ボタンを完了ボタンに

  • Posted by: goron
  • 2010年4月 6日 21:48
  • iPhone

久しぶりにiPhoneネタです。
UITextFieldはいろいろ気が利いていて使いやすのですが、
複数行の入力には対応していないみたいです。(残念)
複数行となると、UITextViewを使います。

UITextViewですと、UITextFieldのようにReturnKeyで入力完了を受け取ることができないので、ナビゲーションバーに「完了」ボタン等を付けていました。UITextFieldと同じ動きがクライアントの要求だったのでとても困っていたのですが、すてきな記事を見つけました。

How to Dismiss the Keyboard when using a UITextView

ポイントは、UITextViewDelegateの
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

UITextViewで入力されたキーをキャッチ、改行コード(\n)の場合は、完了とみなす。

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
	
    if ([text isEqualToString:@"\n"]) {
	[textView resignFirstResponder];
        return NO;
    }
	return YES;
}


UITextViewをinitした後に、
textview.returnKeyType = UIReturnKeyDone;
textview.scrollEnabled = NO;

としておくと、「改行」ボタンは「完了」ボタンに代わり、スクロールもしなくなります。
あとは、placeholderと×ボタンを付けられれば、textfieldみたいに使えるんだけどなぁ。

追記:ついでに文字数制限
上記のdelegateに付け足せばできる。
追記:ご指摘を頂きまして修正しました。

#define TEXT_LIMIT_NUM 40 //40文字まで(半角全角の判別はしていない)
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{
	
    if ([text isEqualToString:@"\n"]) {
	[textView resignFirstResponder];
        return NO;
    }else{
	if (range.location + range.length + [text length] <= TEXT_LIMIT_NUM) {
		if ([textView.text length] + [text length] - range.length <= TEXT_LIMIT_NUM) {
			return YES;
		}else{
			return NO;
		}
    }
}


下記を参考にしました(追記: 間違ってるかもです)
UITextFieldで文字数制限をする


Index of all entries

Home > Archives > 2010年4月 Archive

Profile

iPhone/iPad開発 web制作:平野百貨店
iPhone/iPad開発・web制作・映像制作をしている平野百貨店の店長個人の覚書です。
ご意見・ご感想などお問合せはコチラからどうぞ。

※最近ツッコミをもらうので一応書いておきます。ブログのタイトル「袖触れ合うも多少の縁」はわざとです。正確には「袖振り合うも多生の縁」が正解です。

Search
iPhone Apps






RSS
リンク
のこぎりそうの日記

Return to page top