1

iOS 6 用の xcode 4.5.2 で phonegap 2.7.0 Web アプリケーションを実行しています。私の Web アプリケーションには、6 秒間のビデオ録画オプションが含まれています。というわけで、「 https://github.com/piemonte/PBJVision 」からこのプロセスを実行しました。

現在、CDVPlugin を使用してネイティブ iOS と Phonegap をハイブリッド化しようとしています。homescreen.html に画像 (カメラ アイコン) があるため、画像をクリックすると、画像タグ onclick() が起動し、PBJViewController.m ファイルの -(void) _setup() メソッドが呼び出されます。そのため、mainscreen.html は、いくつかのカスタム デザインでカメラ オプションを表示および非表示にしました。

そこで、PBJViewController.h と PBJViewController.m、PBJStrobeView.h と PBJStrobeView.m、PBJVisionUtilities.h と PBJVisionUtilities.m、最後の PBJVision.h と PBJVison.m のファイルを plugins フォルダーに配置しました。

次に、PBJViewController.js という名前の JavaScript ファイルを作成し、www フォルダーに追加します。

PBJViewController.js

function PBJViewController()
{

}


loadingalert.prototype._setup = function()
{
    //this.resultCallback(res);
    cordova.exec("PBJViewController._setup");
}


cordova.addConstructor(function() {

                       if(!window.plugins)
                       {
                       window.plugins = {};
                       }
                       //window.plugins.loadingalert = new PBJViewController();
                       window.loadingalert = new PBJViewController();
                       });

そして、homescreen.html ファイルの関数 video() に呼び出しコードを書きました。

homescreen.htm l

  function video()
  {
       alert("video function");

      $('#loader').hide();
      $('#divcontroller').hide();
      $('#menuid').hide();
      $('#home_feeds').hide();

      loadingalert._setup();
      //window.plugins.loadingalert._setup();



      //objloading._setup();
      //window.location = "js-call:myObjectiveCFunction";
  //window.location.href='video.html?user_id='+userid+'&fb_token='+getValue("fb_token");
  }

そして、PBJViewController.h ファイルにいくつかの変更を加えました

PBJViewController.h

   #import <UIKit/UIKit.h>
#import <Cordova/CDVPlugin.h>

@interface PBJViewController : CDVPlugin <UIWebViewDelegate>
{
     IBOutlet UIWebView *webView;

}

-(void)_setup:(NSMutableArray*)paramArray withDict:(NSMutableDictionary*)options;

@end

そしてPBJViewcontroller.mファイルで

    #import "PBJViewController.h"
#import "PBJVision.h"
#import "PBJStrobeView.h"
#import <Cordova/CDVPlugin.h>
#import <AssetsLibrary/AssetsLibrary.h>
#import <MediaPlayer/MediaPlayer.h>

@interface UIButton (ExtendedHit)

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;

@end

@implementation UIButton (ExtendedHit)

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
    CGRect relativeFrame = self.bounds;
    UIEdgeInsets hitTestEdgeInsets = UIEdgeInsetsMake(-35, -35, -35, -35);
    CGRect hitFrame = UIEdgeInsetsInsetRect(relativeFrame, hitTestEdgeInsets);
    return CGRectContainsPoint(hitFrame, point);
}

@end

@interface PBJViewController () <
    UIGestureRecognizerDelegate,
    PBJVisionDelegate,
    UIAlertViewDelegate>
{
    UIView *view;
    PBJStrobeView *_strobeView;
    UIButton *_doneButton;
    UIButton *_flipButton;

    UIView *_previewView;
    AVCaptureVideoPreviewLayer *_previewLayer;
    MPMoviePlayerViewController *playerController;
    MPMoviePlayerController *moviePlayer;
    UILabel *_instructionLabel;
    UILabel *ticker;
    NSTimer *timer;
    //NSDate *startDate;
    NSTimeInterval startDate;
    int hours, minutes, seconds;
    int secondsLeft;
    int counter;
    int timeRemaining;
    int i;
    NSTimeInterval elapsedTime;


    UILongPressGestureRecognizer *_longPressGestureRecognizer;
    BOOL _recording;
    BOOL running;

    ALAssetsLibrary *_assetLibrary;
    __block NSDictionary *_currentVideo;


    //NSTimeInterval coding..

    int currMinute;
    int currSecond;
    int currHour;
    int mins;
    NSTimeInterval secondsAlreadyRun;
    NSTimeInterval startTime;
    NSDate *startDate1;


}
//@property (nonatomic, retain) IBOutlet UIView *containerView;
@property (strong, nonatomic) MPMoviePlayerController *moviePlayerController;
@property (nonatomic, strong) NSString *videoPath;

@end

@implementation PBJViewController

//@synthesize containerView;
@synthesize moviePlayerController;
@synthesize videoPath;

#pragma mark - init


/*- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    //counter = 0;
    //ticker.text = [NSString stringWithFormat:@"%d", counter];

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        _assetLibrary = [[ALAssetsLibrary alloc] init];
        //[self _setup];
    }
    return self;
}*/

- (CDVPlugin *)initWithWebView:(UIWebView *)theWebView
{
    self = (PBJViewController *)[super initWithWebView:theWebView];

    if (self) {
        _assetLibrary = [[ALAssetsLibrary alloc] init];
    }

    return self;
}


/*-(void) viewDidLoad
{
    webView = [[UIWebView alloc] init];
    // Register the UIWebViewDelegate in order to shouldStartLoadWithRequest to be called (next function)
    webView.delegate = self;

}*/


- (void)dealloc
{
    [UIApplication sharedApplication].idleTimerDisabled = NO;
    _longPressGestureRecognizer.delegate = nil;

    [super dealloc];
}

//- (void)_setup
-(void)_setup:(NSMutableArray*)paramArray withDict:(NSMutableDictionary*)options;
{
    NSLog(@"Yes inheriting from homescreen btn click");
    running = false;
    secondsLeft = 67;
    view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)];
    view.backgroundColor = [UIColor blackColor];
    view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

    CGFloat viewWidth = CGRectGetWidth(view.frame);

    // done button
    _doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
    _doneButton.frame = CGRectMake(viewWidth - 20.0f - 20.0f, 20.0f, 20.0f, 20.0f);

    UIImage *buttonImage = [UIImage imageNamed:@"capture_yep"];
    [_doneButton setImage:buttonImage forState:UIControlStateNormal];

    [_doneButton addTarget:self action:@selector(_handleDoneButton:) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:_doneButton];

    // elapsed time and red dot
    _strobeView = [[PBJStrobeView alloc] initWithFrame:CGRectZero];
    CGRect strobeFrame = _strobeView.frame;
    strobeFrame.origin = CGPointMake(15.0f, 15.0f);
    _strobeView.frame = strobeFrame;
    [view addSubview:_strobeView];

    // preview
    _previewView = [[UIView alloc] initWithFrame:CGRectZero];
    _previewView.backgroundColor = [UIColor blackColor];
    CGRect previewFrame = CGRectZero;
    previewFrame.origin = CGPointMake(0, 60.0f);
    CGFloat previewWidth = view.frame.size.width;
    previewFrame.size = CGSizeMake(previewWidth, previewWidth);
    _previewView.frame = previewFrame;

    // add AV layer
    _previewLayer = [[PBJVision sharedInstance] previewLayer];
    CGRect previewBounds = _previewView.layer.bounds;
    _previewLayer.bounds = previewBounds;
    _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    _previewLayer.position = CGPointMake(CGRectGetMidX(previewBounds), CGRectGetMidY(previewBounds));
    [_previewView.layer addSublayer:_previewLayer];
    [view addSubview:_previewView];

    // instruction label
    _instructionLabel = [[UILabel alloc] initWithFrame:view.bounds];
    _instructionLabel.textAlignment = NSTextAlignmentCenter;
    _instructionLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:15.0f];
    _instructionLabel.textColor = [UIColor whiteColor];
    _instructionLabel.backgroundColor = [UIColor blackColor];
    _instructionLabel.text = NSLocalizedString(@"Touch and hold to record", @"Instruction message for capturing video.");
    [_instructionLabel sizeToFit];
    CGPoint labelCenter = _previewView.center;
    labelCenter.y += ((CGRectGetHeight(_previewView.frame) * 0.5f) + 35.0f);
    _instructionLabel.center = labelCenter;
    [view addSubview:_instructionLabel];

    ticker = [[UILabel alloc] initWithFrame:CGRectMake(230, 100, 80, 20)];
    ticker.textAlignment = NSTextAlignmentLeft;
    ticker.font = [UIFont fontWithName:@"HelveticaNeue" size:15.0f];
    ticker.textColor = [UIColor whiteColor];
    ticker.backgroundColor = [UIColor blackColor];
    ticker.text = @"00:00:00";
    [_previewView addSubview:ticker];


    // press to record gesture
    _longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] init];
    _longPressGestureRecognizer.delegate = self;
    _longPressGestureRecognizer.minimumPressDuration = 0.0f;
    _longPressGestureRecognizer.allowableMovement = 10.0f;
    [_longPressGestureRecognizer addTarget:self action:@selector(_handleLongPressGestureRecognizer:)];

    // gesture view to record
    UIView *gestureView = [[UIView alloc] initWithFrame:CGRectZero];
    CGRect gestureFrame = view.bounds;
    gestureFrame.origin = CGPointMake(0, 60.0f);
    gestureFrame.size.height -= 10.0f;
    gestureView.frame = gestureFrame;
    [view addSubview:gestureView];
    [gestureView addGestureRecognizer:_longPressGestureRecognizer];

    // flip button
    _flipButton = [UIButton buttonWithType:UIButtonTypeCustom];

    UIImage *flipImage = [UIImage imageNamed:@"capture_flip"];
    [_flipButton setImage:flipImage forState:UIControlStateNormal];

    CGRect flipFrame = _flipButton.frame;
    flipFrame.size = CGSizeMake(25.0f, 20.0f);
    flipFrame.origin = CGPointMake(10.0f, CGRectGetHeight(view.bounds) - 10.0f);
    _flipButton.frame = flipFrame;

    [_flipButton addTarget:self action:@selector(_handleFlipButton:) forControlEvents:UIControlEventTouchUpInside];
    [view addSubview:_flipButton];
}

#pragma mark - view lifecycle



- (void)viewWillAppear:(BOOL)animated
{

    [super viewWillAppear:animated];
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];

    [self _resetCapture];
    [[PBJVision sharedInstance] startPreview];
}

ここで、UIViewController "@interface PBJViewController : CDVPlugin" の CDVPlugin を置き換えるため、「CDVPlugin」が「viewWillAppear:」に応答しない可能性があるという警告メッセージが表示されます。

そして、プラグインの名前と値をconfig.xmlファイルに含めます。

config.xml

これらは私のサンプルコードの1つです。私の問題は、目的の出力が得られないことです。

ヒントや結果を教えてください。

4

1 に答える 1

1

このようにプラグインメソッドを呼び出すことができます cordova.exec(null, null, "PBJViewController", "_setup", [])

于 2013-09-13T05:14:04.110 に答える