博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS学习系列 - MonoTouch绑定原生Obj-C静态库的实现
阅读量:5991 次
发布时间:2019-06-20

本文共 2217 字,大约阅读时间需要 7 分钟。

MonoTouch是利用C#语言进行iOS开发的跨平台解决方案,包括支持iPhone/iPad的开发,目前也支持了最新的iOS 6的版本。

官方地址:

github Sample:

app应用:

MonoTouch可以利用C# 语言进行iOS开发,意味着作为.Net程序员,也可以很容易地进行iOS开发。当然,能够理解objective-c语法对你的iOS学习也是很有帮助的。

 

本篇文章,主要教你如何利用MonoTouch来绑定原生的Obj-C静态库,并且直接调用静态库里面的方法完成实现。

首先利用xcode创建一个原生的静态库:

Project中加入MBProgressHUD的两个文件(MBProgressHUD是个等待加载特效框架,github:)

然后编译下,默认地,在/Library/Developer/Xcode/DerivedData可以找到BindingLibraryl的应用,libBindingLibrary.a

接着打开MonoDevelop,新建一个BindingLibrary解决方案,添加一个BindingLibrarySDK项目:

选择“MonoTouch Binding Project",这个项目专门用来绑定a native library的。

然后,将libBindingLibrary.a添加到该项目中去,并且,你会发现在项目中它会自动产生一个叫做libBindingLibrary.linkwith.cs的文件:

using System;
using MonoTouch.ObjCRuntime;
 
[assembly: LinkWith (
"
libBindingLibrary.a
", LinkTarget.Simulator, ForceLoad = 
true)]

这样就实现了libBindingLibrary.a静态库的导入,此实现类似于DllImport引用非C#(例如C++)动态库的导入。

你可以发现项目中自动产生两个文件,ApiDefinition.cs以及StructsAndEnums.cs文件,ApiDefintion.cs主要作为原生类定义的相关映射。

具体文档可以查看:

这里编写代码:

[BaseType (
typeof (UIView))]
interface MBProgressHUD
{
[Static, Export(
"
showHUDAddedTo:animated:
")]
MBProgressHUD ShowHUDAddedTo (UIView view, 
bool animated);
 
[Export(
"
show:
")]
void Show (
bool animated);
 
[Export(
"
hide:
")]
void Hide (
bool animated);
 
[Export(
"
hide:afterDelay:
")]
void Hide (
bool animated, 
double delay);
 
[Export (
"
labelText
", ArgumentSemantic.Copy)]
String LabelText { 
get
set; } 

其中对应的原生接口有:

+ (MBProgressHUD *)showHUDAddedTo:(UIView *)view animated:(BOOL)animated;
- (
void)show:(BOOL)animated;
- (
void)hide:(BOOL)animated;
- (
void)hide:(BOOL)animated afterDelay:(NSTimeInterval)delay;
@property (copy) NSString *labelText;

其中BaseType为它的继承类型为UIView,对应于原生的MBProgressHUD类的基类为UIView;

Export为导入的方法名称,Static说明它作为一个静态的方式;

ArgumentSematic是它的参数类型为Copy;

 

然后就可以直接编译BindingLibrarySDK了,生成一个BindingLibrarySDK.dll

 

现在,新建一个新的iOS项目:

这里,我选择一个单窗口的iphone应用程序。

把刚刚的BindingLibrarySDK.dll引用进来:

接着,我在xib文件设计一个按钮控件,生成点击事件的代码:

在点击事件代码中,实现:

partial 
void showWindow (MonoTouch.Foundation.NSObject sender)
{
    BindingLibrarySDK.MBProgressHUD hud =     BindingLibrarySDK.MBProgressHUD.ShowHUDAddedTo(
this.View, 
true);
hud.Show(
true);
hud.LabelText = ;
hud.Hide(
true
1);  
//
 hide hud after 1s 
}

最后,运行程序,查看效果:

点击按钮,显示加载效果框,等1秒之后,效果框消失。

 

这样就通过MonoTouch实现了绑定原生Obj-C静态库,调用了相关的原生方法。

本文例子:

 

转载地址:http://fgvlx.baihongyu.com/

你可能感兴趣的文章
Subsets
查看>>
生成二维码(支持中文)
查看>>
粗选公式-通达信(东方财富网)
查看>>
openwrt下部署adbyby去广告大师 免luci 带自启动,自动开启透明代理
查看>>
防火墙安装的十步骤,加强网络第一道保护屏
查看>>
陶哲轩实分析命题10.1.7
查看>>
ruby 反射机制常用方法
查看>>
9月7日学习内容整理:内置函数
查看>>
linux黄金命令[积累中]
查看>>
python 几种不同的格式化输出
查看>>
站立会议(三)
查看>>
MarkdownPad2基础语法
查看>>
mysql 8.0 ~ 存储和账户
查看>>
贪心 Codeforces Round #236 (Div. 2) A. Nuts
查看>>
特定场景下SQL的优化
查看>>
UrlPager免费分页控件2.0版发布!
查看>>
Django介绍&工程搭建
查看>>
解除svn控制下的文件夹的svn的控制
查看>>
P2051 中国象棋
查看>>
AsyncTask 实现异步处理任务
查看>>