项目开发常用实用技术

实现拨打电话 

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

(注意:这个需要真机调试,模拟器无效果)
 
 1 //自动打开拨号页面并自动拨打电话 2 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 = ["123456","120000"]
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属性可以设置闪光灯:开启/关闭/自动
 1 //开启闪光灯 2 picker.cameraFlashMode = UIImagePickerControllerCameraFlashMode.On 
 

 

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

1,系统声音服务介绍:

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

(1)声音播放

复制代码
 1 @IBAction func systemSound(sender: AnyObject) {
 2     //建立的SystemSoundID对象
 3     var soundID:SystemSoundID = 0
 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 = 0
 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     }
复制代码

posted on 2016-06-11 10:58  罗小夕  阅读(249)  评论(0编辑  收藏  举报

导航