项目开发常用实用技术

实现拨打电话

要实现打电话功能,最简单最直接的方式便是:直接跳到拨号界面

(注意:这个需要真机调试,模拟器无效果)

 
  UIApplication.sharedApplication().openURL(NSURL(string :"tel://123456")!) 
 

邮件发送功能的实现

 
使用MessageUI.framework框架除了可以发送短信,还能发送Email,步骤如下:

(1)首先判断设备是否有发送邮件功能
(2)如果设备允许发送邮件,创建一个MFMailComposeViewController视图控制器,并对其设置邮件标题,正文内容,收件人,附件等。
(3)邮件发送后,会执行回调代理方法,可以获取发送结果(成功,失败或取消)
 
效果图如下:
 
代码如下:
 
 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()
     }
 }

短信发送功能的实现

 
使用MessageUI.framework框架可以实现短信发送功能,步骤如下:

(1)首先判断设备是否有发送短信功能
(2)如果设备允许发送短信,创建一个MFMessageComposeViewController视图控制器,并对其设置短信内容和收件人号码列表。
(3)短信发送后,会执行回调代理方法,可以获取发送结果(成功,失败或取消)
 
代码如下:
 
 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()
     }
 }

手机摇晃的监测和响应

 
摇晃手机也是一种常用的交互手段(比如微信摇一摇功能)。iOS SDK中已经将shake事件方便地融合进去了,就像触发touch事件一样简单,发生摇晃事件后程序会自动执行。

 
 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("摇晃被意外终止")
     }
 }

判断设备方向(或监听设备方向的改变)

 
通过UIDevice.currentDevice()来获取设备,可以取得设备当前的方向。

同时,我们可以添加一个通知来监听设备方向的变化,这样在开发中可以对不同的方向定制不同的排版布局界面。
 
下面通过一个样例,演示如何监测设备方向:
 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 = "方向未知"
         }
     }
 }

使用相机拍摄照片

 
1,打开相机拍照

通过设置图片控制器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,调用前置,后置摄像头

相机默认使用后置摄像头,可以设置UIImagePickerControllerCameraDevice类型来使用前置摄像头或后置摄像头。
像iTouch设备不具备前置摄像头,我们可以事先判断下是否支持前置。
 //如果有前置摄像头则调用前置摄像头
 if UIImagePickerController.isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.Front){
     picker.cameraDevice = UIImagePickerControllerCameraDevice.Front
 }

3,设置闪光灯
通过cameraFlashMode属性可以设置闪光灯:开启/关闭/自动

  picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On 
 

系统声音服务的使用(播放声音,提醒,震动)

 
1,系统声音服务介绍:

系统声音服务提供了一个Api,用于播放不超过30秒的声音。它支持的文件格式有限,具体的说只有CAF、AIF和使用PCM或IMA/ADPCM数据的WAV文件。
但此函数没有提供操作声音和控制音量的功能,因此如果是要为多媒体或游戏创建专门声音,就不要使用系统声音服务。
 
2,系统声音服务支持如下三种类型:
(1)声音:立刻播放一个简单的声音文件。如果手机静音,则用户什么也听不见。
(2)提醒:播放一个声音文件,如果手机设为静音或震动,则通过震动提醒用户。
(3)震动:震动手机,而不考虑其他设置。
 
3,使用样例(首先类中要引入AudioToolbox)
  import AudioToolbox 

(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)

 
IJReachability是一个使用Swift写的第三方网络检测类。可以测试网络是否连接,并支持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篇&项目开发常用实用技术的更多相关文章

  1. ios开发——实用技术篇Swift篇&播放MP3

    播放MP3 // MARK: - 播放MP3 /*----- mp3 ------*/ //定时器- func updateTime() { //获取音频播放器播放的进度,单位秒 var cuTime ...

  2. ios开发——实用技术篇Swift篇&地址薄、短信、邮件

    //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnimated(tru ...

  3. ios开发——实用技术篇Swift篇&拍照

    拍照 // MARK: - 拍照 func fromPhotograph() { if UIImagePickerController.isSourceTypeAvailable(.Camera) { ...

  4. ios开发——实用技术篇Swift篇&照片选择

    照片选择 // MARK: - 选择照片 /*----- 选择照片 ------*/ @IBAction func addImageButtonClick() { let actionSheet = ...

  5. ios开发——实用技术篇Swift篇&系统声音

    系统声音 // MARK: - 系统声音 /*----- 系统声音 ------*/ @IBAction func systemSound() { //建立的SystemSoundID对象 var s ...

  6. ios开发——实用技术篇Swift篇&视频

    视频 // MARK: - 播放视频 /*----- 播放视频 ------*/ func moviePlayerPreloadFinish(notification:NSNotification) ...

  7. ios开发——实用技术篇Swift篇&录音

    录音 // MARK: - 录音 /*----- 录音 ------*/ var recorder:AVAudioRecorder? //录音器 var player:AVAudioPlayer? / ...

  8. ios开发——实用技术篇Swift篇&加速计和陀螺仪

    加速计和陀螺仪 //返回按钮事件 @IBAction func backButtonClick() { self.navigationController?.popViewControllerAnim ...

  9. ios开发——实用技术篇Swift篇&多点触摸与手势识别

    多点触摸与手势识别 //点击事件 var atap = UITapGestureRecognizer(target: self, action: "tapDo:") self.vi ...

  10. 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程

    [引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...

随机推荐

  1. [Papers]NSE, $u_3$, Lebesgue space [NNP, QM, 2002; Zhou, JMPA, 2005]

    $$\bex u_3\in L^p(0,T;L^q(\bbR^3)),\quad \frac{2}{p}+\frac{3}{q}=\frac{1}{2},\quad 6< q\leq \inft ...

  2. 【LR】录制测试脚本中的基本菜单

    学习来源: MBoo,小强老师性能测试及Loadrunner培训  ——录制测试脚本: 1.Vuser -> run-time settings ->General Run Logic : ...

  3. JS数组(Array)操作汇总

    1.去掉重复的数组元素.2.获取一个数组中的重复项.3.求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节.4.判断一个字符串中出现次数最多的字符,统计这个次数.5.数组排序. ...

  4. bzoj 3218 a + b Problem(最小割+主席树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3218 [题意] 给n个格子涂白或黑色,白则wi,黑则bi的好看度,若黑格i存在: 1& ...

  5. Python的列表排序

    Python的列表排序 本文为转载,源地址为:http://blog.csdn.net/horin153/article/details/7076321 在 Python 中, 当需要对一个 list ...

  6. 更换Oracle备份数据文件

    应用背景:需要查看和修改一下Interlib中的数据,所以要反复的将备份数据进行导入和清空.整理一下步骤 删除tablespace drop tablespace interlib including ...

  7. Signs of a poorly written jQuery plugin 翻译 (Jquery插件开发注意事项,Jquey官方推荐)

    原文链接:http://remysharp.com/2010/06/03/signs-of-a-poorly-written-jquery-plugin/ 原文作者:remy sharp So far ...

  8. 现代程序设计homework-06

    现代程序设计homework-06 1) 把程序编译通过, 跑起来. 加入了倒退的功能,程序已经能跑起来了(见代码). 不过倒退功能有些bug,不过这是由于原本程序的主逻辑就有点问题(对于不可走的格子 ...

  9. Spring入门(2)-通过构造器注入Bean

    Spring入门(2)-通过构造器注入Bean 前一篇文章将了最基本的spring例子,这篇文章中,介绍一下带有参数的构造函数和通过构造器注入对象引用. 0. 目录 带有参数的构造函数 通过构造器注入 ...

  10. POJ 3660 Cow Contest (Floyd)

    http://poj.org/problem?id=3660 题目大意:n头牛两两比赛经过m场比赛后能判断名次的有几头可转 化为路径问题,用Floyd将能够到达的路径标记为1,如果一个点能 够到达剩余 ...