iOS开发——实用篇Swift篇&项目开发常用实用技术
项目开发常用实用技术
实现拨打电话
邮件发送功能的实现

import UIKit import MessageUI class ViewController: UIViewController ,UINavigationControllerDelegate, MFMailComposeViewControllerDelegate{ override func viewDidLoad() { super.viewDidLoad() //首先要判断设备具不具备发送邮件功能 if MFMailComposeViewController.canSendMail(){ let controller = MFMailComposeViewController() //设置代理 controller.mailComposeDelegate = self //设置主题 controller.setSubject("我是邮件标题") //设置收件人 controller.setToRecipients(["a1@hangge.com","a2@hangge.com"]) //设置抄送人 controller.setCcRecipients(["b1@hangge.com","b2@hangge.com"]) //设置密送人 controller.setBccRecipients(["c1@hangge.com","c2@hangge.com"]) //添加图片附件 var path = NSBundle.mainBundle().pathForResource("hangge.png", ofType: "") var myData = NSData(contentsOfFile: path!) controller.addAttachmentData(myData, mimeType: "image/png", fileName: "swift.png") //设置邮件正文内容(支持html) controller.setMessageBody("我是邮件正文", isHTML: false) //打开界面 self.presentViewController(controller, animated: true, completion: nil) }else{ println("本设备不能发送邮件") } } //发送邮件代理方法 func mailComposeController(controller: MFMailComposeViewController!, didFinishWithResult result: MFMailComposeResult, error: NSError!) { controller.dismissViewControllerAnimated(true, completion: nil) switch result.value{ case MFMailComposeResultSent.value: println("邮件已发送") case MFMailComposeResultCancelled.value: println("邮件已取消") case MFMailComposeResultSaved.value: println("邮件已保存") case MFMailComposeResultFailed.value: println("邮件发送失败") default: println("邮件没有发送") break } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
短信发送功能的实现
import UIKit import MessageUI class ViewController: UIViewController ,UINavigationControllerDelegate, MFMessageComposeViewControllerDelegate{ override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. //首先要判断设备具不具备发送短信功能 if MFMessageComposeViewController.canSendText(){ let controller = MFMessageComposeViewController() //设置短信内容 controller.body = "短信内容:欢迎来到hangge.com" //设置收件人列表 controller.recipients = ["] //设置代理 controller.messageComposeDelegate = self //打开界面 self.presentViewController(controller, animated: true, completion: { () -> Void in }) }else{ println("本设备不能发送短信") } } //发送短信代理 func messageComposeViewController(controller: MFMessageComposeViewController!, didFinishWithResult result: MessageComposeResult) { controller.dismissViewControllerAnimated(true, completion: nil) switch result.value{ case MessageComposeResultSent.value: println("短信已发送") case MessageComposeResultCancelled.value: println("短信取消发送") case MessageComposeResultFailed.value: println("短信发送失败") default: break } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
手机摇晃的监测和响应
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } //开始摇晃 override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent) { println("开始摇晃") } //摇晃结束 override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) { println("摇晃结束") } //摇晃被意外终止 override func motionCancelled(motion: UIEventSubtype, withEvent event: UIEvent) { println("摇晃被意外终止") } }
判断设备方向(或监听设备方向的改变)

import UIKit class ViewController: UIViewController { @IBOutlet weak var orientationLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() //感知设备方向 - 开启监听设备方向 UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications() //添加通知,监听设备方向改变 NSNotificationCenter.defaultCenter().addObserver(self, selector: "receivedRotation", name: UIDeviceOrientationDidChangeNotification, object: nil) //关闭设备监听 //UIDevice.currentDevice().endGeneratingDeviceOrientationNotifications() } //通知监听触发的方法 func receivedRotation(){ var device = UIDevice.currentDevice() switch device.orientation{ case .Portrait: orientationLabel.text = "面向设备保持垂直,Home键位于下部" case .PortraitUpsideDown: orientationLabel.text = "面向设备保持垂直,Home键位于上部" case .LandscapeLeft: orientationLabel.text = "面向设备保持水平,Home键位于左侧" case .LandscapeRight: orientationLabel.text = "面向设备保持水平,Home键位于右侧" case .FaceUp: orientationLabel.text = "设备平放,Home键朝上" case .FaceDown: orientationLabel.text = "设备平放,Home键朝下" case .Unknown: orientationLabel.text = "方向未知" default: orientationLabel.text = "方向未知" } } }
使用相机拍摄照片
通过设置图片控制器UIImagePickerController的来源为UIImagePickerControllerSourceType.Camera,便可以打开相机
import UIKit class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { override func viewDidLoad() { super.viewDidLoad() } //拍照 @IBAction func fromPhotograph(sender: AnyObject) { if UIImagePickerController.isSourceTypeAvailable(.Camera){ //创建图片控制器 let picker = UIImagePickerController() //设置代理 picker.delegate = self //设置来源 picker.sourceType = UIImagePickerControllerSourceType.Camera //允许编辑 picker.allowsEditing = true //打开相机 self.presentViewController(picker, animated: true, completion: { () -> Void in }) }else{ println("找不到相机") } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
2,调用前置,后置摄像头
//如果有前置摄像头则调用前置摄像头 if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front){ picker.cameraDevice = UIImagePickerControllerCameraDevice.Front }
3,设置闪光灯
通过cameraFlashMode属性可以设置闪光灯:开启/关闭/自动
系统声音服务的使用(播放声音,提醒,震动)
(1)声音播放
@IBAction func systemSound(sender: AnyObject) { //建立的SystemSoundID对象 var soundID:SystemSoundID = //获取声音地址 var path = NSBundle.mainBundle().pathForResource("msg", ofType: "wav") //地址转换 var baseURL = NSURL(fileURLWithPath: path!) //赋值 AudioServicesCreateSystemSoundID(baseURL, &soundID) //播放声音 AudioServicesPlaySystemSound(soundID) }
(2)提醒
@IBAction func systemAlert(sender: AnyObject) { //建立的SystemSoundID对象 var soundID:SystemSoundID = //获取声音地址 var path = NSBundle.mainBundle().pathForResource("msg", ofType: "wav") //地址转换 var baseURL = NSURL(fileURLWithPath: path!) //赋值 AudioServicesCreateSystemSoundID(baseURL, &soundID) //提醒(同上面唯一的一个区别) AudioServicesPlayAlertSound(soundID) }
(3)振动
@IBAction func systemVibration(sender: AnyObject) { //建立的SystemSoundID对象 var soundID = SystemSoundID(kSystemSoundID_Vibrate) //振动 AudioServicesPlaySystemSound(soundID) }
判端网络连接状态,连接类型(3G还是Wifi)

使用样例:
import UIKit class ViewController: UIViewController { @IBOutlet weak var statusLabel: UILabel! @IBOutlet weak var typeLabel: UILabel! override func viewDidLoad() { super.viewDidLoad() } @IBAction func checkConnect(sender: AnyObject) { //判断连接状态 if IJReachability.isConnectedToNetwork(){ statusLabel.text = "网络连接:可用" }else{ statusLabel.text = "网络连接:不可用" } //判断连接类型 let statusType = IJReachability.isConnectedToNetworkOfType() switch statusType{ case .WWAN: typeLabel.text = "连接类型:移动网络" case .WiFi: typeLabel.text = "连接类型:WiFi" case .NotConnected: typeLabel.text = "连接类型:没有网络连接" } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() }
iOS开发——实用篇Swift篇&项目开发常用实用技术的更多相关文章
- ios开发——实用技术篇Swift篇&播放MP3
播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...
- ios开发——实用技术篇Swift篇&地址薄、短信、邮件
//返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnimated(tru ...
- ios开发——实用技术篇Swift篇&拍照
拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...
- ios开发——实用技术篇Swift篇&照片选择
照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...
- ios开发——实用技术篇Swift篇&系统声音
系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...
- ios开发——实用技术篇Swift篇&视频
视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...
- ios开发——实用技术篇Swift篇&录音
录音 // MARK: - 录音 /*----- 录音 ------*/ var recorder:AVAudioRecorder? //录音器 var player:AVAudioPlayer? / ...
- ios开发——实用技术篇Swift篇&加速计和陀螺仪
加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...
- ios开发——实用技术篇Swift篇&多点触摸与手势识别
多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...
- 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程
[引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...
随机推荐
- 浅谈Linux容器和镜像签名
导读 从根本上说,几乎所有的主要软件,即使是开源软件,都是在基于镜像的容器技术出现之前设计的.这意味着把软件放到容器中相当于是一次平台移植.这也意味着一些程序可以很容易就迁移,而另一些就更困难. 我大 ...
- JS:实用功能
ylbtech-jQuery:函数-导航 添加样式(addClass).移除样式(removeClass) 轮替函数(toggle()) 选项拼加 全选 网页刷点器 jQuery:3.1,添加样式(a ...
- HDU 4035Maze(树状+概率dp,绝对经典)
题意: 给你n个节点的树,从1节点开始走,到每个节点都有三种情况,被杀死回到1节点,找到隐藏的出口出去,沿着当前节点相邻的边走到下一个节点,给出每个节点三种情况发生的概率分别为ki,ei,1-ki-e ...
- HDU 5727 Necklace 环排+二分图匹配
这是从山东大学巨巨那里学来的做法 枚举下黑色球的排列总数是8!,然后八个白球可选的位置与左右两个黑球存不存在关系建图就行 这是原话,具体一点,每次生成环排,只有互不影响的才连边 最后:注重一点,n个数 ...
- 《Python 学习手册4th》 第十三章 while和for循环
''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容 (每天看42页内容,可以保证月底看完此书) “重点 ...
- javascript AES加密 C#AES解密实现
首先需要引入js类库 crypto-js(开源),地址:http://code.google.com/p/crypto-js 现在很多人无法打开这个地址不要紧,下面我们会将全部代码贴出来 需要引入 a ...
- LeetCode题解——Palindrome Number
题目: 判断一个数字是不是回文数字,即最高位与最低位相同,次高位与次低位相同,... 解法: 求出数字的位数,然后依次求商和求余判断是否相等. 代码: class Solution { public: ...
- Ubuntu 软件包管理详解
原文转载自:http://www.cppblog.com/jb8164/archive/2009/01/09/71583.html Ubuntu 方便宜用,最值得让人称道的便是其安装软件的方式, 一条 ...
- Oauth2 接口api
weibo:http://open.weibo.com/wiki/API weixin:http://mp.weixin.qq.com/wiki/home/index.html qq开发平台: 1 ...
- JodaTime用法简介
JodaTime用法简介 Java的Date和Calendar用起来简直就是灾难,跟C#的DateTime差距太明显了,幸好有JodaTime 本文简单罗列JodaTime的用法 package co ...