项目开发常用实用技术

实现拨打电话

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

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

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

邮件发送功能的实现

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

(1)首先判断设备是否有发送邮件功能
(2)如果设备允许发送邮件,创建一个MFMailComposeViewController视图控制器,并对其设置邮件标题,正文内容,收件人,附件等。
(3)邮件发送后,会执行回调代理方法,可以获取发送结果(成功,失败或取消)
 
效果图如下:
 
代码如下:
 
  1. import UIKit
  2. import MessageUI
  3.  
  4. class ViewController: UIViewController ,UINavigationControllerDelegate,
  5. MFMailComposeViewControllerDelegate{
  6.  
  7. override func viewDidLoad() {
  8. super.viewDidLoad()
  9.  
  10. //首先要判断设备具不具备发送邮件功能
  11. if MFMailComposeViewController.canSendMail(){
  12. let controller = MFMailComposeViewController()
  13. //设置代理
  14. controller.mailComposeDelegate = self
  15. //设置主题
  16. controller.setSubject("我是邮件标题")
  17. //设置收件人
  18. controller.setToRecipients(["a1@hangge.com","a2@hangge.com"])
  19. //设置抄送人
  20. controller.setCcRecipients(["b1@hangge.com","b2@hangge.com"])
  21. //设置密送人
  22. controller.setBccRecipients(["c1@hangge.com","c2@hangge.com"])
  23.  
  24. //添加图片附件
  25. var path = NSBundle.mainBundle().pathForResource("hangge.png", ofType: "")
  26. var myData = NSData(contentsOfFile: path!)
  27. controller.addAttachmentData(myData, mimeType: "image/png", fileName: "swift.png")
  28.  
  29. //设置邮件正文内容(支持html)
  30. controller.setMessageBody("我是邮件正文", isHTML: false)
  31.  
  32. //打开界面
  33. self.presentViewController(controller, animated: true, completion: nil)
  34. }else{
  35. println("本设备不能发送邮件")
  36. }
  37. }
  38.  
  39. //发送邮件代理方法
  40. func mailComposeController(controller: MFMailComposeViewController!,
  41. didFinishWithResult result: MFMailComposeResult, error: NSError!) {
  42. controller.dismissViewControllerAnimated(true, completion: nil)
  43.  
  44. switch result.value{
  45. case MFMailComposeResultSent.value:
  46. println("邮件已发送")
  47. case MFMailComposeResultCancelled.value:
  48. println("邮件已取消")
  49. case MFMailComposeResultSaved.value:
  50. println("邮件已保存")
  51. case MFMailComposeResultFailed.value:
  52. println("邮件发送失败")
  53. default:
  54. println("邮件没有发送")
  55. break
  56. }
  57. }
  58.  
  59. override func didReceiveMemoryWarning() {
  60. super.didReceiveMemoryWarning()
  61. }
  62. }

短信发送功能的实现

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

(1)首先判断设备是否有发送短信功能
(2)如果设备允许发送短信,创建一个MFMessageComposeViewController视图控制器,并对其设置短信内容和收件人号码列表。
(3)短信发送后,会执行回调代理方法,可以获取发送结果(成功,失败或取消)
 
代码如下:
 
  1. import UIKit
  2. import MessageUI
  3.  
  4. class ViewController: UIViewController ,UINavigationControllerDelegate,
  5. MFMessageComposeViewControllerDelegate{
  6.  
  7. override func viewDidLoad() {
  8. super.viewDidLoad()
  9. // Do any additional setup after loading the view, typically from a nib.
  10.  
  11. //首先要判断设备具不具备发送短信功能
  12. if MFMessageComposeViewController.canSendText(){
  13. let controller = MFMessageComposeViewController()
  14. //设置短信内容
  15. controller.body = "短信内容:欢迎来到hangge.com"
  16. //设置收件人列表
  17. controller.recipients = ["]
  18. //设置代理
  19. controller.messageComposeDelegate = self
  20. //打开界面
  21. self.presentViewController(controller, animated: true, completion: { () -> Void in
  22.  
  23. })
  24. }else{
  25. println("本设备不能发送短信")
  26. }
  27. }
  28.  
  29. //发送短信代理
  30. func messageComposeViewController(controller: MFMessageComposeViewController!,
  31. didFinishWithResult result: MessageComposeResult) {
  32. controller.dismissViewControllerAnimated(true, completion: nil)
  33. switch result.value{
  34. case MessageComposeResultSent.value:
  35. println("短信已发送")
  36. case MessageComposeResultCancelled.value:
  37. println("短信取消发送")
  38. case MessageComposeResultFailed.value:
  39. println("短信发送失败")
  40. default:
  41. break
  42. }
  43. }
  44.  
  45. override func didReceiveMemoryWarning() {
  46. super.didReceiveMemoryWarning()
  47. }
  48. }

手机摇晃的监测和响应

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

 
  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. }
  8.  
  9. //开始摇晃
  10. override func motionBegan(motion: UIEventSubtype, withEvent event: UIEvent) {
  11. println("开始摇晃")
  12. }
  13.  
  14. //摇晃结束
  15. override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
  16. println("摇晃结束")
  17. }
  18.  
  19. //摇晃被意外终止
  20. override func motionCancelled(motion: UIEventSubtype, withEvent event: UIEvent) {
  21. println("摇晃被意外终止")
  22. }
  23. }

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

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

同时,我们可以添加一个通知来监听设备方向的变化,这样在开发中可以对不同的方向定制不同的排版布局界面。
 
下面通过一个样例,演示如何监测设备方向:
  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. @IBOutlet weak var orientationLabel: UILabel!
  6.  
  7. override func viewDidLoad() {
  8. super.viewDidLoad()
  9.  
  10. //感知设备方向 - 开启监听设备方向
  11. UIDevice.currentDevice().beginGeneratingDeviceOrientationNotifications()
  12. //添加通知,监听设备方向改变
  13. NSNotificationCenter.defaultCenter().addObserver(self, selector: "receivedRotation",
  14. name: UIDeviceOrientationDidChangeNotification, object: nil)
  15.  
  16. //关闭设备监听
  17. //UIDevice.currentDevice().endGeneratingDeviceOrientationNotifications()
  18. }
  19.  
  20. //通知监听触发的方法
  21. func receivedRotation(){
  22. var device = UIDevice.currentDevice()
  23. switch device.orientation{
  24. case .Portrait:
  25. orientationLabel.text = "面向设备保持垂直,Home键位于下部"
  26. case .PortraitUpsideDown:
  27. orientationLabel.text = "面向设备保持垂直,Home键位于上部"
  28. case .LandscapeLeft:
  29. orientationLabel.text = "面向设备保持水平,Home键位于左侧"
  30. case .LandscapeRight:
  31. orientationLabel.text = "面向设备保持水平,Home键位于右侧"
  32. case .FaceUp:
  33. orientationLabel.text = "设备平放,Home键朝上"
  34. case .FaceDown:
  35. orientationLabel.text = "设备平放,Home键朝下"
  36. case .Unknown:
  37. orientationLabel.text = "方向未知"
  38. default:
  39. orientationLabel.text = "方向未知"
  40. }
  41. }
  42. }

使用相机拍摄照片

 
1,打开相机拍照

通过设置图片控制器UIImagePickerController的来源为UIImagePickerControllerSourceType.Camera,便可以打开相机

  1. import UIKit
  2.  
  3. class ViewController: UIViewController, UIImagePickerControllerDelegate,
  4. UINavigationControllerDelegate {
  5. override func viewDidLoad() {
  6. super.viewDidLoad()
  7. }
  8. //拍照
  9. @IBAction func fromPhotograph(sender: AnyObject) {
  10. if UIImagePickerController.isSourceTypeAvailable(.Camera){
  11. //创建图片控制器
  12. let picker = UIImagePickerController()
  13. //设置代理
  14. picker.delegate = self
  15. //设置来源
  16. picker.sourceType = UIImagePickerControllerSourceType.Camera
  17. //允许编辑
  18. picker.allowsEditing = true
  19. //打开相机
  20. self.presentViewController(picker, animated: true, completion: { () -> Void in
  21.  
  22. })
  23. }else{
  24. println("找不到相机")
  25. }
  26. }
  27.  
  28. override func didReceiveMemoryWarning() {
  29. super.didReceiveMemoryWarning()
  30. }
  31. }

2,调用前置,后置摄像头

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

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

  picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On 
 

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

 
1,系统声音服务介绍:

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

(1)声音播放

  1. @IBAction func systemSound(sender: AnyObject) {
  2. //建立的SystemSoundID对象
  3. var soundID:SystemSoundID =
  4. //获取声音地址
  5. var path = NSBundle.mainBundle().pathForResource("msg", ofType: "wav")
  6. //地址转换
  7. var baseURL = NSURL(fileURLWithPath: path!)
  8. //赋值
  9. AudioServicesCreateSystemSoundID(baseURL, &soundID)
  10. //播放声音
  11. AudioServicesPlaySystemSound(soundID)
  12. }

(2)提醒

  1. @IBAction func systemAlert(sender: AnyObject) {
  2. //建立的SystemSoundID对象
  3. var soundID:SystemSoundID =
  4. //获取声音地址
  5. var path = NSBundle.mainBundle().pathForResource("msg", ofType: "wav")
  6. //地址转换
  7. var baseURL = NSURL(fileURLWithPath: path!)
  8. //赋值
  9. AudioServicesCreateSystemSoundID(baseURL, &soundID)
  10. //提醒(同上面唯一的一个区别)
  11. AudioServicesPlayAlertSound(soundID)
  12. }

(3)振动

  1. @IBAction func systemVibration(sender: AnyObject) {
  2. //建立的SystemSoundID对象
  3. var soundID = SystemSoundID(kSystemSoundID_Vibrate)
  4. //振动
  5. AudioServicesPlaySystemSound(soundID)
  6. }

判端网络连接状态,连接类型(3G还是Wifi)

 
IJReachability是一个使用Swift写的第三方网络检测类。可以测试网络是否连接,并支持3G和Wifi的检测。


使用样例:

  1. import UIKit
  2.  
  3. class ViewController: UIViewController {
  4.  
  5. @IBOutlet weak var statusLabel: UILabel!
  6. @IBOutlet weak var typeLabel: UILabel!
  7.  
  8. override func viewDidLoad() {
  9. super.viewDidLoad()
  10. }
  11.  
  12. @IBAction func checkConnect(sender: AnyObject) {
  13. //判断连接状态
  14. if IJReachability.isConnectedToNetwork(){
  15. statusLabel.text = "网络连接:可用"
  16. }else{
  17. statusLabel.text = "网络连接:不可用"
  18. }
  19.  
  20. //判断连接类型
  21. let statusType = IJReachability.isConnectedToNetworkOfType()
  22. switch statusType{
  23. case .WWAN:
  24. typeLabel.text = "连接类型:移动网络"
  25. case .WiFi:
  26. typeLabel.text = "连接类型:WiFi"
  27. case .NotConnected:
  28. typeLabel.text = "连接类型:没有网络连接"
  29. }
  30. }
  31.  
  32. override func didReceiveMemoryWarning() {
  33. super.didReceiveMemoryWarning()
  34. }

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. POJ 2549 Sumsets

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10593   Accepted: 2890 Descript ...

  2. Druid连接池简单入门

    偶尔的机会解释Druid连接池,后起之秀,但是评价不错,另外由于是阿里淘宝使用过的所以还是蛮看好的. 1.jar包依赖--Druid依赖代码 <dependency> <groupI ...

  3. linux 命令——文件管理 cat

    一.介绍 cat 是一个文本文件查看和连接工具.从第一个字节开始正向查看文件的内容. 主要有三大功能: 1.一次显示整个文件.$ cat   filename ~,y6;e2.从键盘创建一个文件.$ ...

  4. 同行评审 Peer Review

    周五的课上,章老师给我们上了一节关于同行评审(Peer Review)的课程,让我了解了以前并不熟悉的这一过程.课上我们就姚思丹同学项目组做的项目,分组进行了审查. 首先介绍一下同行评审(Peer R ...

  5. 【STL】帮你复习STL泛型算法 一

    STL泛型算法 #include <iostream> #include <vector> #include <algorithm> #include <it ...

  6. Spark生态之Spark Graphx

  7. 通过request读取所有参数

    获取request里的所有参数及参数名(参数名自动获取)  -  [ Java ] request里有两个方法: 1)request.getParameterMap(); Enumeration en ...

  8. UVALive 7464 Robots (贪心)

    Robots 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/K Description http://7xjob4.com1.z ...

  9. listview禁止双击一条之后选中复选框按钮的方法

    this.listViewUsers.SelectedItems[0].Checked = !this.listViewUsers.SelectedItems[0].Checked;

  10. MVC神韵---你想在哪解脱!(十一)

    为了实现这一处理,我们需要在MoviesController类中追加第二个Create方法.这个Create方法具有一个[HttpPost]属性,它意味着我们将要用它来处理提交到“/Movies/Cr ...