Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面
关于欢迎界面
很多App第一次启动都会有一个欢迎界面,欢迎界面往往决定这用户对App的第一映像,所以欢迎界面的重要性不言而喻。QQ、微博、知乎等App都有制作精良的欢迎界面。
大多数欢迎界面由几个界面组成,通常界面上会有一张背景图和简单的介绍文字,页面直接的切换类似于Android的ViewPager一样,靠左右滑动来切换。通常会提供了一个Skip按钮来让用户跳过欢迎界面。
本文将告诉你如何制作一个欢迎界面。
需要用到的第三方库
- EAIntroView(Object-C写的欢迎界面第三方库)
https://github.com/ealeksandrov/EAIntroView- Settings插件 (JamesMontemagno制作的插件之一,用来记录App的设置数据)
https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Settings
一、绑定EAIntroView
为了使用EAIntroView我们首先需要将源生的Ojbect-C库绑定成Xamarin能用的程序集。
Xamarin绑定请参考Xamarin官网的教程,我只会讲主要的操作和贴一些关键的代码。
http://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/
在有了Objective Sharpie后绑定已经比较方便了,基本上只要稍微修改下自动生成ApiDefinitions文件即可。
1.获取EAIntroView源代码
用git命令将EAIntroView克隆下来,并稍微浏览下源生的Ojbect-C代码
git clone https://github.com/ealeksandrov/EAIntroView.git
2.生成静态库
在XCode中建立新的iOS Cocoa Touch Static Library,名字叫做EAIntroViewStatic。
将EAIntroView的源代码文件(EAIntroView文件夹中,共4个)复制到XCode的工程中。
按下Command+B编译,我们会发现提示缺少了EARestrictedScrollView相关的文件。这是因为EAIntroView依赖于EARestrictedScrollView造成的,EARestrictedScrollView是EAIntroView的作者的另一个第三方库。
和EAIntroView一样,在源生开发中也是利用CocoaPod将源代码文件引用到当前工程中的,所以我们到Example\Pods\EARestrictedScrollView文件夹中将EARestrictedScrollView的源代码复制到我们的工程中来。再修改下头文件的引用就OK了。
再次按下Command+B就提示Build Successed了。
当目标平台为iOS Device时会显示Build Faild,为了在真机中可以使用,我们需要进行签名。
点击工程,就可以进入设置界面,在Build Setting中的Code Signing Idtntity中选择iOS Developer。
3.制作模拟器与真机都能使用的通用类库
然后我们需要将.a文件制作成通用类库
参考这篇文章
官网的绑定教程中也有提及
为了方便我给出Makefile,按照上述操作进行过代码签名后可以用make命令方便的生成模拟器和真机(32位、64位)都可以使用的.a文件,如果你开始和我的工程名不一样的话请注意修改。
XBUILD=/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild
PROJECT_ROOT=.
PROJECT=$(PROJECT_ROOT)/EAIntroViewStatic.xcodeproj
TARGET=EAIntroViewStatic
all: libEAIntroView.a
libEAIntroView-i386.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphonesimulator -configuration Release clean build
-mv $(PROJECT_ROOT)/build/Release-iphonesimulator/lib$(TARGET).a $@
libEAIntroView-armv7.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch armv7 -configuration Release clean build
-mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
libEAIntroView-arm64.a:
$(XBUILD) -project $(PROJECT) -target $(TARGET) -sdk iphoneos -arch arm64 -configuration Release clean build
-mv $(PROJECT_ROOT)/build/Release-iphoneos/lib$(TARGET).a $@
libEAIntroView.a: libEAIntroView-armv7.a libEAIntroView-i386.a libEAIntroView-arm64.a
lipo -create -output $@ $^
clean:
-rm -f *.a *.dll
libEAIntroView.a文件就是最终的生成结果。
4.利用Objective Sharpie工具进行绑定
首先还是在Xamarin中建立iOS Binding Project。
将刚刚生成的.a文件拖入到工程中,并修改linkWith描述文件
using System;
using ObjCRuntime;
[assembly: LinkWith("libEAIntroView.a", LinkTarget.ArmV7 | LinkTarget.Simulator | LinkTarget.Arm64 | LinkTarget.ArmV7s | LinkTarget.Simulator64, SmartLink = true, ForceLoad = true)]
然后用Objective Sharpie将Object-C的头文件翻译成ApiDefinitions
具体的教程我也不写了,官网已经非常详细了,下面是要执行的命令
sharpie bind --output=EAIntroView --namespace=EAIntroView --sdk=iphoneos8.2 [项目的绝对路径]/EAIntroViewStatic/*.h
生成ApiDefinitions.cs和StructsAndEnums.cs后覆盖Binding项目的同名文件。
然后还需要进行少量的修改,主要是同名函数的问题(Object-C的函数名由函数名+参数名决定,所以当函数名相同而参数名不同时C#没办法分辨,只要改改函数名就行),还有几个提示是需要需要用强类型替换NObject类型,这个我们可以先不管。
ApiDefinitions.cs文件太长我就不贴了,到时候会放在Github上。
至此我们生成了Xamarin能使用的dll文件。
二、Settings插件的使用
1.安装Settings插件
有2种方式
这里我们用Nuget省事,在Nuget命令行中输入如下的命令即可。
Install-Package Xam.Plugins.Settings
另外iOS需要这样设置下,启用Generic Value Type Sharing
2.基本教程
参考
主要是CrossSettings.Current对象和它的2个函数GetValueOrDefault、AddOrUpdateValue,这2个函数的功能看名字应该就非常清楚了。
// 从设置中获取指定Key的值,并转换成相应的类型。
GetValueOrDefault<T>(string key);
// 向设置中添加制定key的值,如果已存在key则是更新当前值。
AddOrUpdateValue<T>(string key,T value);
设置的生命周期与应用程序一样,当应用程序被卸载时清空。
三、实例
1.新建工程
- 在刚刚的Binding Project的解决方案中新建一个iOS的SingleView工程,工程名为EAintroView.Sample。
2.添加引用
- 通过Edit References引用绑定工程。
- 通过Nuget引用Settings插件
3.修改EAIntroView_SampleViewController文件如下:
using System;
using UIKit;
using Refractored.Xam.Settings;
using Refractored.Xam.Settings.Abstractions;
using CoreGraphics;
namespace EAIntroView.Sample
{
public partial class EAIntroView_SampleViewController : UIViewController
{
public EAIntroView_SampleViewController(IntPtr handle)
: base(handle)
{
}
/// <summary>
/// App设置
/// </summary>
/// <value>The app settings.</value>
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Perform any additional setup after loading the view, typically from a nib.
//在主界面中添加一个UILabel用于区分
var label = new UILabel(new CGRect(0, 200, 320, 60));
label.Text = "这里是主界面哦~";
label.TextAlignment = UITextAlignment.Center;
label.Font = UIFont.SystemFontOfSize(40);
this.View.AddSubview(label);
//通过Setting获取启动次数,当第一次启动的时候获取到的值为0
var BootTimes = AppSettings.GetValueOrDefault<int>("BootTimes");
//第一个欢迎页面,我们在上面显示本次是第几次启动App
EAIntroPage page1 = new EAIntroPage();
page1.Title = "Page1";
page1.Desc = "Hello World Page1 no Description";
page1.BgColor = UIColor.Orange;
//在正常情况下我们可以通过判断BootTimes的值来决定是否显示欢迎界面
if (BootTimes <= 0)
{
page1.Desc = "你是第一次启动哦~~~";
}
else
{
page1.Desc = string.Format("本次是你第{0}次启动本程序", BootTimes);
}
EAIntroPage page2 = new EAIntroPage();
page2.Title = "Page2";
page2.Desc = "Hello World Page2 no Description";
page2.BgColor = UIColor.Red;
EAIntroPage page3 = new EAIntroPage();
page3.Title = "Page3";
page3.Desc = "Hello World Page3 no Description";
page3.BgImage = UIImage.FromBundle("Visual-Studio.jpg");
//欢迎界面
EAIntroView introView = new EAIntroView(this.View.Frame, new []{ page1, page2, page3 });
//显示欢迎界面
introView.ShowInView(this.View);
//将启动次数增加1,并保存在配置文件中
AppSettings.AddOrUpdateValue("BootTimes", ++BootTimes);
}
}
}
效果如下:
当第一次运行时,第一个界面显示首次运行本程序,当在后台关闭程序后再打开界面会显示是第二次打开本程序。
有关EAIntroView的详细配置请参考Github的原项目,样式还是挺多的。
四、总结
本文主要描述了
- Settings插件的使用
- 绑定了一个叫EAintroView的iOS第三方库
- 利用以上2点制作了一个简单欢迎界面
相关源代码在 https://github.com/unhappy224/EAIntroViewSharp
如有疑问可以写在评论中,或者联系我:unhappy224#163.com QQ:104228916
欢迎加入QQ群:230865920
我第一次用Markdown写博客,不知道为什么博客园的Markdown这么丑,大家可以看https://github.com/unhappy224/EAIntroViewSharp效果好一些
Xamarin.iOS - 利用Settings插件与EAIntroView制作App的欢迎界面的更多相关文章
- iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are:A-Z ,a-z,0-9,dash,period,underscore,but the name cannot start w
iOS利用Application Loader打包提交到App Store时遇到错误: The filename 未命名.ipa in the package contains an invalid ...
- [iOS基础控件 - 5.3] 电台APP可滚动主界面(UIScrollView制作)
A.功能 1.上下可滚动的电台 2 x n 的图标集 2.顶部半透明标题 3.底部半透明功能按钮 B.实现思路 1.设置图标.启动画面 2.拖入UIScrollView,设置背景色 ( ...
- iOS 开发之应用内弹出 App Store 应用界面
在APP内给其他APP做推广,经常用到在应用内弹出应用的APP #import <StoreKit/SKStoreProductViewController.h> 设置代理:<SKS ...
- Xamarin.IOS之快速入门
欢迎大家加入以下开源社区 Xamarin-Cn:https://github.com/Xamarin-Cn Mvvmcross-Cn:https://github.com/Mvvmcross-Cn ...
- Xamarin.iOS开发初体验
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKwAAAA+CAIAAAA5/WfHAAAJrklEQVR4nO2c/VdTRxrH+wfdU84pW0
- 如何利用excel中的数据源制作数据地图
关于这个问题,制作数据地图的方法已不新奇,总体来说有这么几类方案: 一类方案:直接在excel里制作 优势:个人小数据量应用较为方便简单 缺点:需要熟悉VBA,且更强大的功能对VBA水平要求较高 1. ...
- 用c#开发苹果应用程序 xamarin.ios方式
NetworkComms网络通信框架序言 Networkcomms网络通信框架来自于英国,支持以xamarin.ios的方式开发苹果应用程序 其开源版本2.3.1中带有一个示例程序,实现聊天功能,只要 ...
- 最详细在Windows安装Xamarin.iOS教程
最详细在Windows安装Xamarin.iOS教程 来源:http://www.cnblogs.com/llyfe2006/articles/3098280.html 本文展示了如何设立Xamari ...
- Xamarin iOS教程之编辑界面编写代码
Xamarin iOS教程之编辑界面编写代码 Xamarin iOS的Interface Builder Interface Builder被称为编辑界面.它是一个虚拟的图形化设计工具,用来为iOS应 ...
随机推荐
- [codevs1287]矩阵乘法
题目描述 Description 小明最近在为线性代数而头疼,线性代数确实很抽象(也很无聊),可惜他的老师正在讲这矩阵乘法这一段内容.当然,小明上课打瞌睡也没问题,但线性代数的习题可是很可怕的.小明希 ...
- oracle 创建索引
一.索引简介 1.索引相当于目录 2.索引是通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率. 3.索引的创建要适度,多了会影响增删改的效率,少了会影响查询的效率,索引最好创建在取 ...
- HDU 4195 Regular Convex Polygon
思路:三角形的圆心角可以整除(2*pi)/n #include<cstdio> #include<cstring> #include<iostream> #incl ...
- 微软Build2014大会干货总结-2
继昨天微软在Build2014大会上宣布一系列重磅举措后,第二天的主题是微软云(Microsoft Azure)及开发者战略,CSDN记者继续从旧金山现场给您发来一线报道. 第二天的主角是新上任的微软 ...
- 页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)
页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:F ...
- HDU-4415 Assassin’s Creed 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4415 用贪心来解,开始分为两个集合的方法错了,没有考虑之间的相互影响,正确的姿势应该是这样的,分两种情 ...
- linux bin文件制作
一 Linux安装文件 Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类, 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文 ...
- Lua包管理工具Luarocks详解 - 15134559390的个人空间 - 开源中国社区
Lua包管理工具Luarocks详解 - 15134559390的个人空间 - 开源中国社区 Lua包管理工具Luarocks详解
- Ⅷ.spring的点点滴滴--抽象对象和子对象
承接上文 抽象对象和子对象 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class parent { public string Name { get; ...
- linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改
原文地址:http://www.cnblogs.com/firtree/p/4028354.html linux下利用openssl来实现证书的颁发(详细步骤) 1.首先需要安装openssl,一个开 ...