ios开发

Smobiler如何实现.net一键开发,ios和android跨平台运行

你离开我真会死。 提交于 2020-03-30 15:21:41
目录 一 概述 二 原理 移动端控件 移动端API 三 写在最后 一. 概述 Smobiler实现了.net服务端开发,ios和android客户端直接运行显示,无需学习Objective-C或Java,一次开发搞定iOS和Android两大平台. 框架底层的通讯使用的是C++的,保证了通讯的安全性,并实现和动态部署的功能,在app快速迭代的时代,通过Smobiler开发的App,只需要修改服务端,即可实现客户端的实时更新,不需要重新打包发版. 二. 原理 接下来,将从原理上谈谈Smobiler如何实现此功能的. 并分别针对iOS和Android讲解. 控件 Designer上提供了很多基础控件,像Panel,Button,Image,Lable,TextBox,这些基础UI组件和原生应用完全一致,实际上,在客户端,这些控件就是原生控件开发而成的,通过服务端控制其属性,传递给客户端配置. API Smobiler客户端使用原生开发方式,集成了手机硬件的大部分功能,服务端只需要通过简单的API调用即可实现对手机硬件功能的使用.而第三方插件的方式,也给有能力的用户开发自己需要的原生功能带来了可能. 移动端控件 在做iOS和Android的跨平台功能中,控件都是原生的,通过加密的自有协议Render,创建丰富的原生UI库,让Smobiler用户感受和原生应用一致的用户体验.

iOS开发拓展篇—音效的播放

我的梦境 提交于 2020-03-29 12:22:59
iOS开发拓展篇—音效的播放 一、简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐   比如游戏中的“背景音乐”,一般播放时间较长 框架:播放音频需要用到AVFoundation.framework框架 二、音效的播放 1.获得音效文件的路径   NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtension:nil]; 2.加载音效文件,得到对应的音效ID   SystemSoundID soundID = 0;   AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); 3.播放音效   AudioServicesPlaySystemSound(soundID); 注意:音效文件只需要加载1次 4.音效播放常见函数总结 加载音效文件   AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID) 释放音效资源   AudioServicesDisposeSystemSoundID

iOS开发拓展篇—音效的播放

懵懂的女人 提交于 2020-03-29 12:17:47
一、简单介绍 简单来说,音频可以分为2种 (1)音效   又称“短音频”,通常在程序中的播放时长为1~2秒   在应用程序中起到点缀效果,提升整体用户体验 (2)音乐   比如游戏中的“背景音乐”,一般播放时间较长 框架:播放音频需要用到 AVFoundation.framework 框架 二、音效的播放 1.获得音效文件的路径   NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav" withExtension:nil]; 2.加载音效文件,得到对应的音效ID   SystemSoundID soundID = 0;   AudioServicesCreateSystemSoundID((__bridge CFURLRef)(url), &soundID); 3.播放音效   AudioServicesPlaySystemSound(soundID); 注意:音效文件只需要加载1次 4.音效播放常见函数总结 加载音效文件   AudioServicesCreateSystemSoundID(CFURLRef inFileURL, SystemSoundID *outSystemSoundID) 释放音效资源   AudioServicesDisposeSystemSoundID(SystemSoundID

iOS开发UI篇—Date Picker和UITool Bar控件简单介绍

北城以北 提交于 2020-03-29 07:42:25
iOS开发UI篇—Date Picker和UITool Bar控件简单介绍 一、Date Picker控件 1.简单介绍: Date Picker显示时间的控件 有默认宽高,不用设置数据源和代理 如何改成中文的? (1)查看当前系统是否为中文的,把模拟器改成是中文的 (2)属性,locale选择地区 如果默认显示不符合需求。时间有四种模式可以设置,在model中进行设置 时间可以自定义(custom)。 设置最小时间和最大时间,超过就会自动回到最小时间。 最大的用途在于自定义键盘:弹出一个日期选择器出来,示例代码如下: 2.示例代码 1 // 2 // YYViewController.m 3 // datepicker 4 // 5 // Created by apple on 14-6-3. 6 // Copyright (c) 2014年 itcase. All rights reserved. 7 // 8 9 #import "YYViewController.h" 10 11 @interface YYViewController () 12 /** 13 * 文本输入框 14 */ 15 @property (strong, nonatomic) IBOutlet UITextField *textfield; 16 17 @end 18 19

iOS开发之时间格式的转化

纵然是瞬间 提交于 2020-03-27 18:23:34
在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。 例如:如何将格式为“12-May-14 05.08.02.000000 PM”的时间转化成“2014/05/12 5:08:02”,下面是具体实现代码: NSString* timeStr = @"12-May-14 05.08.02.000000 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateStyle:NSDateFormatterMediumStyle]; [formatter setTimeStyle:NSDateFormatterShortStyle]; [formatter setDateFormat:@"dd-MMMM-yy hh.mm.ss.ssssss aa"];//设置源时间字符串的格式 NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];//设置时区 [formatter setTimeZone:timeZone]; NSDate* date = [formatter dateFromString:timeStr];/

iOS开发多线程篇—创建线程

三世轮回 提交于 2020-03-26 09:48:56
iOS开发多线程篇—创建线程 一、创建和启动线程简单说明 一个NSThread对象就代表一条线程 创建、启动线程 (1) NSThread *thread = [[NSThread alloc] initWithTarget:self selector:@selector(run) object:nil]; [thread start]; // 线程一启动,就会在线程thread中执行self的run方法 主线程相关用法 + (NSThread *)mainThread; // 获得主线程 - (BOOL)isMainThread; // 是否为主线程 + (BOOL)isMainThread; // 是否为主线程 其他用法 获得当前线程 NSThread *current = [NSThread currentThread]; 线程的调度优先级:调度优先级的取值范围是0.0 ~ 1.0,默认0.5,值越大,优先级越高 + (double)threadPriority; + (BOOL)setThreadPriority:(double)p; 设置线程的名字 - (void)setName:(NSString *)n; - (NSString *)name; 其他创建线程的方式 (2)创建线程后自动启动线程 [NSThread detachNewThreadSelector:

iOS开发——短信验证码

十年热恋 提交于 2020-03-24 11:52:19
作为iOS开发者,大家都应该知道ShareSDK这个比较出名的第三方分享(带统计功能)开发工具包。 他的官网今年年初发布了短信验证码的SDK。本文介绍它的短信验证码SDK。(部分过程参考官网如何集成的文档) 1.登录官网下载——短信验证码SDK 网址: http://www.mob.com/#/index ——————————————————图片分割线—————————————————————— 下载好的压缩包解压后打开如下图所示: SMS_SDK:短信验证码SDK,包括静态库和本地化文件。使用时直接将这个文件夹拖入工程。 SMS_SDKDemo:示例Demo 。 2, 导入SDK 将SMS_SDK这个文件夹拖入工程 (要勾选copy和target) 添加依赖库文件 必要: (Xcode7 及以后动态库后缀为tbd,Xcode7以前后缀为dylib) libicucore.tbd libz.tbd MessageUI.framework javascriptcore.framework libstdc++.tbd 可选: AddressBook.framework (通讯录功能需要) AddressBookUI.framework(通讯录功能需要) 3,由于iOS9 默认使用https请求,将其改回原来的http (详见我的博客< iOS9 http不能访问网络—

iOS开发导航栏控件的作用

依然范特西╮ 提交于 2020-03-24 04:59:25
一,在iOS开发过程中针对一些导航栏上需要自定义视图的情况,有时候需要用系统自带的处理,有些时候需要自定义一些视图并把视图添加上去,这时候主要是它们的位置有些许差别,下面简单写下demo; 1,用导航栏系统自带的视图处理: 1 //1 中间的图片 2 UIImageView *imageBarView = [[UIImageView alloc] initWithFrame:CGRectMake(kScreenWidth / 2.f - 40.f, 20.f, 80, 30)]; 3 imageBarView.image = [UIImage imageNamed:@"中间视图名称"]; 4 self.navigationItem.titleView = imageBarView; 5 6 7 //2 导航栏右边的分类按钮 8 UIButton *buttonRightItem = [UIButton buttonWithType:UIButtonTypeCustom]; 9 buttonRightItem.frame = CGRectMake(0.f, 0.f, 50.f, 30.f); 10 [buttonRightItem setTitle:@"分类" forState:UIControlStateNormal]; 11 [buttonRightItem

IOS开发之基础oc语法

喜你入骨 提交于 2020-03-22 18:32:14
类 1.类的定义: 类=属性+方法; -属性代表类的特征 -方法是类能对变化做出的反应 类定义的格式:类的声明和类的实现组成 -接口(类的声明):@interface 类名:基类的名字 .类名首字母要大写 .冒号表示继承关系,冒号后面的是类的父类 .NSObject是OC所有类的基类 .类的声明放在“类名+.h”文件中,要由两部分组成:实例变量和方法 -实现(类的实现):@implementation类名 .方法实现 -都用@end结束c 2.类的使用: OC中,对象通过指针来声明 如:ClassA *object; OC中对象的创建,使用alloc来创建一个对象,编译器会给object对象分配一块可用的内存地址,然后需要对对象进行初始化即调用init方法,这样这个对象才可以使用,如: Person *person=[Person alloc]; //创建对象分配空间 person=[person init]; //初始化赋初值, 初始化后:int=0,char=“*0”?,bool=FALSE 同一个类的每个对象有不同的实例变量的存储空间 同一类的每个对象共享该类的方法 方法嵌套的形式来调用,如:ClassA *object=[[ClassA alloc] init]; 3.类的访问权限 三种访问权限: -公有的:@public -私有的:@private -保护的:

iOS多线程开发之GCD(死锁篇)

霸气de小男生 提交于 2020-03-22 06:04:02
上篇和中篇讲解了什么是GCD,如何使用GCD,这篇文章将讲解使用GCD中将遇到的死锁问题。有兴趣的朋友可以回顾《 iOS多线程开发之GCD(上篇) 》和《 iOS多线程开发之GCD(中篇) 》。 言归正传,我们首先来回顾下死锁,所谓死锁: 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源(如数据源,内存等,变量不是资源)而造成的一种互相等待的现象,若无外部处理作用,它们都将无限等待下去。   死锁形成的原因: 系统资源不足 进程(线程)推进的顺序不恰当; 资源分配不当   死锁形成的条件: 互斥条件: 所谓互斥就是进程在某一时间内独占资源。 请求与保持条件: 一个进程因请求资源而阻塞时,对已获得的资源保持不放。 不剥夺条件: 进程已获得资源,在末使用完之前,不能强行剥夺。 循环等待条件: 若干进程之间形成一种头尾相接的循环等待资源关系。 在GCD中,主要的死锁就是当前串行队列里面同步执行当前串行队列。解决的方法就是将同步的串行队列放到另外一个线程执行。 在举例说明之前,我们先来回顾下GCD的中的任务派发和队列。 (1)任务派发 任务派发方式 说明 dispatch_sync() 同步执行,完成了它预定的任务后才返回,阻塞当前线程 dispatch_async() 异步执行,会立即返回,预定的任务会完成但不会等它完成,不阻塞当前线程 (2)队列种类 队列种类 说明 串行队列