Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/117-dd204aa8

-件のトラックバック

-件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

UIImagePickerControllerの撮影ボタン押下のイベントを書き換える。

UIImagePickerController 撮影ボタンを押したイベント』に示した方法は、ただ撮影開始及び終了のタイミングのイベントを拾うだけで、撮影そのものの機能は殺してなかった。

今回は、「撮影の機能は殺すが、撮影中の赤点滅機能は残す」を試みる。(ビデオモード)

まず、撮影機能を殺す方法は、こちらで紹介されている。こちらの例はカメラモードで、ボタンを押して5秒後に撮影なので、これをカメラモードに変更して、「5秒後に撮影」の部分を外す。
これで、ボタンを押しても、ボタンが凹むだけになる。

で、次の課題である「赤点滅機能は残す」だが、まずは前回も参考にした方法で特定したbuttonには、点滅させるメソッドが実装されている筈と仮定した。

クラスが持っているメソッドをダンプさせる方法はこちらを参考にし、以下の様に書いてみる。

#import </usr/include/objc/objc-runtime.h>
void classDump( Class classObject ) {
unsigned int outCount;
Method *p = class_copyMethodList( classObject, &outCount );
int i;
NSLog( @"%s", class_getName( classObject ) );
for( i = 0; i < outCount; i++ ) {
SEL sel = method_getName( *(p+i) );
NSLog( @" %s", sel_getName(sel) );
}
}
-(void) viewDidAppear: (BOOL)animated {
[super viewDidAppear:animated];

//0 0 0 0 2 0 1 0
button = [[[[[[[[[[[[[[[[
self.view subviews] objectAtIndex:0]
subviews] objectAtIndex:0]
subviews] objectAtIndex:0]
subviews] objectAtIndex:0]
subviews] objectAtIndex:2]
subviews] objectAtIndex:0]
subviews] objectAtIndex:1]
subviews] objectAtIndex:0];

Class target_class = [button class];
classDump(target_class);
}

で、実行すると、コンソールに

2010-05-06 14:27:55.640 Video[1957:207] PLCameraButton
2010-05-06 14:27:55.656 Video[1957:207] orientation
2010-05-06 14:27:55.658 Video[1957:207] _setDeviceOrientation:animated:
2010-05-06 14:27:55.660 Video[1957:207] _deviceOrientationChanged:
2010-05-06 14:27:55.661 Video[1957:207] _stopWatchingDeviceOrientationChanges
2010-05-06 14:27:55.663 Video[1957:207] _startWatchingDeviceOrientationChanges
2010-05-06 14:27:55.665 Video[1957:207] setLockEnabled:
2010-05-06 14:27:55.667 Video[1957:207] _setHighlightOnMouseDown:
2010-05-06 14:27:55.668 Video[1957:207] setEnabled:
2010-05-06 14:27:55.670 Video[1957:207] setDontShowDisabledState:
2010-05-06 14:27:55.672 Video[1957:207] pointInside:withEvent:
2010-05-06 14:27:55.673 Video[1957:207] willMoveToSuperview:
2010-05-06 14:27:55.675 Video[1957:207] setVideoIsRecording:
2010-05-06 14:27:55.677 Video[1957:207] setVideoMode:
2010-05-06 14:27:55.678 Video[1957:207] dealloc
2010-05-06 14:27:55.680 Video[1957:207] _setIcon:
2010-05-06 14:27:55.682 Video[1957:207] initWithDefaultSize

と出力される。名前からして「setVideoIsRecording:」だが、引数は山勘でBOOLでYESで開始、NOで停止と踏んだら当たりだった。

以下に、ソースを示す。(Delegateから呼び出し所は前回と同じなので省略)

//VideoControlle.h
#import <Foundation/Foundation.h>

@protocol CameraButtonPressed;

@interface VideoController : UIImagePickerController {
UIControl *button;
BOOL sw;
}

@property(nonatomic,assign) id <UINavigationControllerDelegate,
UIImagePickerControllerDelegate,
CameraButtonPressed> delegate;

-(void) viewDidAppear: (BOOL)animated;
-(IBAction) cameraButtonPressed:(id)sender;

@end

@protocol CameraButtonPressed
@optional
- (void)imagePickerControllerCameraButtonPressed:(id)sender;
@end



#import "VideoController.h"

@implementation VideoController

@synthesize delegate;

-(void) viewDidAppear: (BOOL)animated {
[super viewDidAppear:animated];

//0 0 0 0 2 0 1 0
button = [[[[[[[[[[[[[[[[
self.view subviews] objectAtIndex:0]
subviews] objectAtIndex:0]
subviews] objectAtIndex:0]
subviews] objectAtIndex:0]
subviews] objectAtIndex:2]
subviews] objectAtIndex:0]
subviews] objectAtIndex:1]
subviews] objectAtIndex:0];

id target = [[button allTargets] anyObject];
NSString* str = [[button actionsForTarget:target forControlEvent:UIControlEventTouchUpInside] objectAtIndex:0];
SEL action = NSSelectorFromString(str);
[button removeTarget:target action:action forControlEvents:UIControlEventTouchUpInside];

[button addTarget:self action:@selector(cameraButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
}

-(IBAction) cameraButtonPressed :(id) sender {
sw = sw ? NO : YES;
//UIcontroll my not respond のワーニングは無視
[button setVideoIsRecording:sw];

if([[self delegate] respondsToSelector:@selector(imagePickerControllerCameraButtonPressed:)]) {
[[self delegate] imagePickerControllerCameraButtonPressed:sender];
}
}

@end


だが、こういう事は、してはダメらしい
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/117-dd204aa8

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

kovayashi

Author:kovayashi
・嫌いなもの
 →好きなもの

・インストール
 →バンドル
・バックアップ
 →アップロード
・努力
 →チート

最近のトラックバック

ブログ内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。