惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Secure Thoughts
美团技术团队
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
C
CXSECURITY Database RSS Feed - CXSecurity.com
Engineering at Meta
Engineering at Meta
人人都是产品经理
人人都是产品经理
月光博客
月光博客
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recorded Future
Recorded Future
I
Intezer
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
GbyAI
GbyAI
罗磊的独立博客
V
V2EX
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
Last Week in AI
Last Week in AI
T
Tailwind CSS Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
A
About on SuperTechFans
Scott Helme
Scott Helme
Vercel News
Vercel News
Spread Privacy
Spread Privacy
T
Threat Research - Cisco Blogs
Recent Announcements
Recent Announcements
Hacker News: Ask HN
Hacker News: Ask HN
C
CERT Recently Published Vulnerability Notes
G
Google Developers Blog
B
Blog
博客园 - 叶小钗
WordPress大学
WordPress大学
博客园 - 聂微东
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Jina AI
Jina AI
IT之家
IT之家
C
Cybersecurity and Infrastructure Security Agency CISA
P
Palo Alto Networks Blog
小众软件
小众软件
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
AWS News Blog
AWS News Blog

博客园 - Leepy

AI应用平台搭建之旅(上) - 框架篇(附:AICon大会阿里国际Agent应用平台分享) 阿里巴巴LangEngine开源了!支撑亿级网关规模的高可用Java原生AI应用开发框架 在mac上安装Go语言初体验 iOS学习系列 - 标签Tag列表的实现 iOS学习系列 - UITableView下拉更新/上提加载的实现 iOS学习系列 - 在iOS客户端实现google oauth2登录以及在asp.net服务端上form认证 iOS学习系列 - 利用ASIHTTPRequest实现异步队列 iOS学习系列 - 扩展机制category与associative Wind.js在移动跨平台框架PhoneGap中的异步体验 Mono for Andriod学习与实践(1)— 初体验 阿里技术嘉年华官网上线啦! Silverlight实现对Sql Server Profiler的SQL实时监控 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Silverlight 4以下版本模拟鼠标双击事件 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理 Thrift初探:简单实现C#通讯服务程序 对于.Net中C#指针的研究 各大主流.Net的IOC框架性能测试比较 依赖注入框架Autofac的简单使用
iOS学习系列 - MonoTouch绑定原生Obj-C静态库的实现
Leepy · 2012-10-09 · via 博客园 - Leepy

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

官方地址:http://xamarin.com/

github Sample:https://github.com/xamarin/monotouch-samples

app应用:http://xamarin.com/apps/all

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

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

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

Project中加入MBProgressHUD的两个文件(MBProgressHUD是个等待加载特效框架,github:https://github.com/jdg/MBProgressHUD

然后编译下,默认地,在/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主要作为原生类定义的相关映射。

具体文档可以查看:Binding Objective-C Types

这里编写代码:

[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 { getset; } 

其中对应的原生接口有:

+ (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(true1);  // hide hud after 1s 
}

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

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

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

本文例子:https://github.com/sunleepy/monotouch_binding