Entries

スポンサーサイト

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

-件のトラックバック

-件のコメント

コメントの投稿

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

UIImagePickerController 撮影ボタンを押したイベント

UIImagePickerControllerに撮影ボタンを押したイベントをトラップするデリゲーターが無い。

カメラだったら、ボタンをオーバーレイさせて、takePictureメソッドを呼んでも良いかもしれないが、ビデオだと、takePictureは呼ばれないようなので、困っていたら、とても参考になるブログをみつけたので、それをベースにdelegateするように改造した。

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

@protocol CameraButtonPressed;

@interface VideoController : UIImagePickerController {
}

@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



// VideoController.m
#import "VideoController.h"

@implementation VideoController

@synthesize delegate;

-(void) viewDidAppear: (BOOL)animated {
[super viewDidAppear:animated];
//0 0 0 0 2 0 1 0
UIControl *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];
[button addTarget:self action:@selector(cameraButtonPressed:)
forControlEvents:UIControlEventTouchUpInside];
}
-(IBAction) cameraButtonPressed :(id) sender {
if([[self delegate] respondsToSelector:@selector(imagePickerControllerCameraButtonPressed:)]) {
[[self delegate] imagePickerControllerCameraButtonPressed:sender];
}
}
@end


以下、View-basedAplicationのUntitledAppDelegateから呼び出した例。が追加行。

// UntitledAppDelegate.h

#import <UIKit/UIKit.h>
#import "VideoController.h"

@class UntitledViewController;

@interface UntitledAppDelegate : NSObject <UIApplicationDelegate,
UINavigationControllerDelegate,
UIImagePickerControllerDelegate,
CameraButtonPressed
> {

UIWindow *window;
UntitledViewController *viewController;
VideoController *ipc;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UntitledViewController *viewController;



// UntitledAppDelegate.m

#import "UntitledAppDelegate.h"
#import "UntitledViewController.h"
#import <MobileCoreServices/UTCoreTypes.h>

@implementation UntitledAppDelegate

@synthesize window;
@synthesize viewController;

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[window addSubview:viewController.view];
[window makeKeyAndVisible];

ipc = [[VideoController alloc] init];
ipc.sourceType = UIImagePickerControllerSourceTypeCamera;
ipc.mediaTypes = [NSArray arrayWithObject:(NSString *) kUTTypeMovie];
ipc.delegate = self;
[viewController presentModalViewController:ipc animated:YES];


return YES;
}

- (void)imagePickerControllerCameraButtonPressed:(id)sender{
NSLog(@"capture button pressed");
}


- (void)dealloc {
[ipc release];
[viewController release];
[window release];
[super dealloc];
}

@end


Frameworksに、MobileCoreServices.frameworkを追加を忘れずに。

一行が長いので適当におった。

delegateさせるクラスの作り方はこちらを参考にした。

後日記:
iOS4になってレイアウトが変わった。

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

この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://kovayashi.blog120.fc2.com/tb.php/115-6de20aae

0件のトラックバック

0件のコメント

コメントの投稿

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

Appendix

プロフィール

kovayashi

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

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

最近のトラックバック

ブログ内検索

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