どうやってIOSでCordovaプラグインを使うのですか?


一、準備
プラグイン機能:IOSカメラを開く
1:プラグインの作成
plugman create--name[プラグイン名]--plugin_id[プラグインID]--plugin_version[プラグインバージョン番号]
plugman create--name Camera Demo--plugin_id cordova-plugin-camerademo--plugin_version 1.0.0
2:IOSプラットフォームを追加する
plugman pltform add--pltform_name ios
3:package.jsonファイルを作成する
以下の二つはいずれもpackage.jsonを生成することができます。
1:コマンド「npm init」を使ってpackage.jsonファイルを作成します。
2:plugman createpackagejson[プラグインパス]
元アプリケーションで使用されているionic UIフレームは、packge.jsonがないとプラグインがインストールできません。
最終プラグインディレクトリ構造

View Controller.hとView Controller.mファイル以外のファイルは上記の手順で自動的に生成されます。
プロセス
ファイルView Controller.hとView Controller.mを作成します。
View Controller.h

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController{
}
@property (nonatomic,strong) UIImagePickerController *imagePicker;
- (void)getDeviceInfo;  //  ios    
- (void)OpenCamera;		//  ios  
@end
View Controller.m

#import "ViewController.h"

@interface ViewController ()
@end

@implementation ViewController
- (id) init{
    NSLog(@"=======================     ");
    self = [super init];
    self.imagePicker = [[UIImagePickerController alloc] init];
    return self;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    
    UIButton *button =[[UIButton alloc]init];
    [button setTitle:@"    " forState:(UIControlStateNormal)];
    [button setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
    [button setTitleColor:[UIColor blueColor] forState:(UIControlStateHighlighted)];
    [button setBackgroundColor:[UIColor yellowColor]];
    [button setFrame:CGRectMake(10, 50, 100, 30)];
    //  
    //[button addTarget:self action:@selector(click) forControlEvents:(UIControlEventTouchUpInside)];
    [self.view addSubview:button];
    
    UIButton *deviceBtn =[[UIButton alloc]init];
    [deviceBtn setTitle:@"      " forState:(UIControlStateNormal)];
    [deviceBtn setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
    [deviceBtn setTitleColor:[UIColor blueColor] forState:(UIControlStateHighlighted)];
    [deviceBtn setBackgroundColor:[UIColor yellowColor]];
    [deviceBtn setFrame:CGRectMake(120, 50, 200, 30)];
    [deviceBtn addTarget:self action:@selector(getDeviceInfo) forControlEvents:(UIControlEventTouchUpInside)];
    [self.view addSubview:deviceBtn];
    
    UIButton *openCameraBtn =[[UIButton alloc]init];
    [openCameraBtn setTitle:@"    " forState:(UIControlStateNormal)];
    [openCameraBtn setTitleColor:[UIColor redColor] forState:(UIControlStateNormal)];
    [openCameraBtn setTitleColor:[UIColor blueColor] forState:(UIControlStateHighlighted)];
    [openCameraBtn setBackgroundColor:[UIColor yellowColor]];
    [openCameraBtn setFrame:CGRectMake(330, 50, 200, 30)];
    [openCameraBtn addTarget:self action:@selector(openCamera) forControlEvents:(UIControlEventTouchUpInside)];
    [self.view addSubview:openCameraBtn];
    
    
}

- (void)getDeviceInfo{
    NSLog(@"      。。。。");
    NSString *name = [[UIDevice currentDevice] name];
    NSString *systemName = [[UIDevice currentDevice] systemName];
    NSString *systemVersion = [[UIDevice currentDevice] systemVersion];
    NSString *model = [[UIDevice currentDevice] model];
    NSString *localizeModel = [[UIDevice currentDevice] localizedModel];
    
    UILabel *nameL = [[UILabel alloc] init];
    UILabel *systemNameL = [[UILabel alloc] init];
    UILabel *systemVersionL = [[UILabel alloc] init];
    UILabel *modelL = [[UILabel alloc] init];
    UILabel *localizeModelL = [[UILabel alloc] init];
    
    [nameL setText:name];
    [systemNameL setText:systemName];
    [systemVersionL setText:systemVersion];
    [modelL setText:model];
    [localizeModelL setText:localizeModel];
    
    [nameL setTextColor:[UIColor blueColor]];
    [systemNameL setTextColor:[UIColor blueColor]];
    [systemVersionL setTextColor:[UIColor blueColor]];
    [modelL setTextColor:[UIColor blueColor]];
    [localizeModelL setTextColor:[UIColor blueColor]];
    
    CGFloat x = 10;
    CGFloat y = 80;
    CGFloat width = 200;
    CGFloat height=20;
    
    nameL.frame = CGRectMake(x, y+20, width, height);
    systemNameL.frame = CGRectMake(x, y+40, width, height);
    systemVersionL.frame = CGRectMake(x, y+60, width, height);
    modelL.frame = CGRectMake(x, y+80, width, height);
    localizeModelL.frame = CGRectMake(x, y+100, width, height);
    
    [self.view addSubview:nameL];
    [self.view addSubview:systemNameL];
    [self.view addSubview:systemVersionL];
    [self.view addSubview:modelL];
    [self.view addSubview:localizeModelL];
}

- (void)openCamera{
    //NSLog(@"     。。。。");
    //UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
    self.imagePicker.editing = YES;
    self.imagePicker.delegate = self;
    self.imagePicker.allowsEditing = YES;
    
    if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
        NSLog(@"    。。。");
        self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
    }
    
    [self presentViewController:self.imagePicker animated:YES completion:nil];
}
@end
この二つのファイルは実は私がすでにiosの元のプロジェクトの下で運転したファイルをコンパイルしました。その後、Camera Demo.mに呼び出されました。実は倉庫のような役割をしています。
まっすぐにしてください。一つの倉庫(VieController.hとView Controller.m)があり、一つの種類のView Controllerを提供しています。この種類は二つの方法を提供しています。
  • (void)get DeviceInfo;/iosデバイス情報を取得する
  • (void)OpenCamera;/iosカメラを開く
  • そしてCamera Demo.mはこのクラスを実例化しました。
    Camera Demo.m
    
    /********* CameraDemo.m Cordova Plugin Implementation *******/
    
    #import <Cordova/CDV.h>
    #import "ViewController.h"
    
    //      CDVPlugin  ,  CameraDemo Cordova   
    @interface CameraDemo : CDVPlugin {
      // Member variables go here.
    }
    @property (nonatomic,strong) ViewController *view;  //    ViewController
    - (void)coolMethod:(CDVInvokedUrlCommand*)command;  //         ,    
    - (void)openCamera:(CDVInvokedUrlCommand*)command;
    @end
    
    @implementation CameraDemo
    
    - (void)pluginInitialize{
        NSLog(@"===========================   CameraDemo");
        [super pluginInitialize];
        //    ViewController 
        self.view = [[ViewController alloc] init];
    }
    
    //         ,    
    - (void)coolMethod:(CDVInvokedUrlCommand*)command
    {
        CDVPluginResult* pluginResult = nil;
        NSString* echo = [command.arguments objectAtIndex:0];
    
        if (echo != nil && [echo length] > 0) {
            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:echo];
        } else {
            pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
        }
    
        [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
    }
    
    - (void)openCamera:(CDVInvokedUrlCommand*)command
    {
    	//  ViewController   viewController      
        [self.viewController presentViewController:self.view animated:YES completion:nil];
        //ViewController *view = [[ViewController alloc] init];
        //[view openCamera];
        //CDVPluginResult* pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];;
        //[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
    }
    @end
    Camera Demo.js
    
    var exec = require('cordova/exec');
    
    exports.coolMethod = function (arg0, success, error) {
        exec(success, error, 'CameraDemo', 'coolMethod', [arg0]);
    };
    
    exports.openCamera = function (arg0, success, error) {
        exec(success, error, 'CameraDemo', 'openCamera', [arg0]);
    };
    
    plugin.xml(このファイルは非常に重要です。jsは全部それに頼って呼んで、資料を調べてください。)
    
    <?xml version='1.0' encoding='utf-8'?>
    <plugin id="cordova-plugin-camerademo" version="1.0.0"
        xmlns="http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <name>CameraDemo</name>
        <js-module name="CameraDemo" src="www/CameraDemo.js">
            <clobbers target="cordova.plugins.CameraDemo" />
        </js-module>
    
        <platform name="ios">
            <config-file parent="/*" target="config.xml">
                <feature name="CameraDemo">
                    <param name="ios-package" value="CameraDemo" onload="true"/>
                </feature>
            </config-file>
            <source-file src="src/ios/CameraDemo.m" />
            <header-file src="src/ios/ViewController.h" />
            <source-file src="src/ios/ViewController.m" />
        </platform>
    </plugin>
    package.json(通常は修正不要)
    
    {
      "name": "cordova-plugin-camerademo",
      "version": "1.0.0",
      "description": "",
      "cordova": {
        "id": "cordova-plugin-camerademo",
        "platforms": [
          "ios"
        ]
      },
      "keywords": [
        "ecosystem:cordova",
        "cordova-ios"
      ],
      "author": "",
      "license": "ISC"
    }
    Camera Demo.jsはplugin.xml配置により生のocject-cメソッドを呼び出した。
    最後に
    Cordovaプロジェクト起動プラグイン
    重要なのは、プラグインのplugin.xmlの構成と関連がある場合、plugin.xmlは非常に重要です。
    
    //      ts     
    declare let cordova:any
    cordova.plugins.CameraDemo.openCamera();
    以上はどのようにIOSでCordovaプラグインを使うかの詳細です。IOSがCordovaを使うことについての資料は他の関連記事に注目してください。