- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 iOS 6 的 xcode 4.5.2 中做 phonegap 2.7.0 web 应用程序。在我的 web 应用程序中包含持续时间为六秒的视频录制选项。所以我从“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 文件放在插件文件夹中。
然后我创建一个 JavaScript 文件并命名为 PBJViewController.js 并添加到 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.html
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];
}
在这里,我遇到警告消息“CDVPlugin”可能无法响应“viewWillAppear:”,因为我将 CDVPlugin 替换为 UIViewController“@interface PBJViewController : CDVPlugin”
我在 config.xml 文件中包含插件名称和值,
配置文件
这些是我的示例代码之一。我的问题是直到没有得到想要的输出。
请给出一些建议或结果。
最佳答案
您可以尝试像这样调用插件方法 cordova.exec(null, null, "PBJViewController", "_setup", [])
关于javascript - 我无法使用 CDVPlugin 从 phonegap 2.7.0 中的 javascript 访问 native iOS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777766/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!