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.定时/计 ...
随机推荐
- java中的getClass()函数
Java反射学习 所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代 ...
- IT版孔乙己(转)
[不要做学究]回忆孔先生IT版 我关于本文评价:看到这篇文章很多人会生出这样的疑问“这明明是在诋毁钻研技术的人嘛?是不是在宣扬技术无用论?”. 初看这篇文章的时候我也是这样的想法,但是逐步才明白这篇文 ...
- lightoj 1022
直接算即可,特别要注意精度 #include<cstdio> #include<cmath> int main(){ int t, CASE(0); double r; sca ...
- 【剑指offer 面试题12】打印1到最大的n位数
思路: 用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印. #include "stdio.h" #include "string.h" ...
- 仿酷狗音乐播放器开发日志十一——CTreeNodeUI的bug修复
由于做播放列表控件,我的CMusicLength控件继承了CTreeVieWUI控件,在向分组控件中添加播放项目时,发现代码无法正常工作,调用CTreeNodeUI控件的Add方法后无反应,导致我的播 ...
- rfid 门卡系统和人体红外感应开发
今天忙了一天了,因为毕昇杯我发现如果不加把劲,可能寒假之前代码搞不出了,今天突击了两个模块,一个人体感应模块,和rfid刷卡模块,这两个模块谈不上自己编写代码,今天的任务也仅仅是看懂了代码,现在我总结 ...
- ACM2050
问题描述: 平面上有n条折线,问这些折线最多能将平面分割成多少块? 样例输入 1 2 样例输出 2 7 答案是: 2n ( 2n + 1 ) / 2 + 1 - 2n = 2 n^2 – n + ...
- RStudio Keyboard Shortcuts
Console Description Windows & Linux Mac Move cursor to Console Ctrl+2 Ctrl+2 Clear console Ctrl+ ...
- ERROR (ClientException)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABPwAAABCCAIAAABM0F+3AAAgAElEQVR4nO2d+29d13Xn7y+xyMvLty
- BAT-使用BAT方法结束进程(删除进程)
@echo off taskkill /f /im GAM.exe taskkill /f /im GCL10.exe