• 项目开发常用实用技术


    实现拨打电话 

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

    (注意:这个需要真机调试,模拟器无效果)
     
     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     }
    复制代码
  • 相关阅读:
    Scala学习笔记——断言和单元测试
    Spark学习笔记——读写Hbase
    Spark学习笔记——读写HDFS
    Scala学习笔记——简化代码、柯里化、继承、特质
    Spark学习笔记——读写MySQL
    Hbase学习笔记——基本CRUD操作
    Spark学习笔记——在集群上运行Spark
    IDEA启动Tomcat服务器时某些端口(如1099端口)被占用的解决办法
    ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型
    java中的stream的Map收集器操作
  • 原文地址:https://www.cnblogs.com/luoxiaoxi/p/5574895.html
Copyright © 2020-2023  润新知