2016年5月4日 星期三

[小技巧]image url 轉成圖

var imgURLString = "http://graph.facebook.com/" + (fid as String) + "/picture?type=large" 

        let imgURL = NSURL(string: imgURLString)
        
let imageData = NSData(contentsOfURL: imgURL!)
        
let image = UIImage(data: imageData!)

        self.HeadImage.image = image

[功能]NSUserDefaults

1.在class內先建立儲存的資料夾
 var scoreDefault: NSUserDefaults = NSUserDefaults.standardUserDefaults()

p.s.重點是.standardUserDefaults這個是預設的資料夾

2.在要存的東西下方儲存資料
(若是按鈕 就放在每個按鈕內存變數)
scoreDefault.setObject(starTexField.text, forKey: "scoreall")

3.在要讀取的地方讀取資料
(像我想要換頁回來後還是存在,所以放在viewDidLoad內,另外也想要share到dialog內 所以也在share內讀取)
var score1 : String? = scoreDefault.objectForKey("scoreall") as! String?

4.顯示資料
(幾乎和讀取資料的地方一樣)

starTexField.text = score1!

另外NSUserDefault也可以存NSData
這樣圖片就可以在無網路的狀態也可以跑出來
ex:
var images2: NSData! = emailDefault.objectForKey("fUser_imageall") as! NSData!

            let image = UIImage(data: images2!)
           
        self.picture.image = image

[功能]地圖 googleMap

//在ViewController內放入UIWebView
放上IBOutlet之後 , viewDidLoad內把地址做request連結
如下:

var hotelAddr:NSString = ""

@IBOutlet weak var webView: UIWebView!

   
override func viewDidLoad() {
       
super.viewDidLoad()

       
var address:NSString = "http://maps.google.com/maps?hl=zh-TW&q=" + (hotelAddr as String)

       
var url:NSURL = NSURL(string: address.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)!

       
var request:NSURLRequest=NSURLRequest(URL: url)
       
self.webView.loadRequest(request)

    }

[功能]電話

注意:只能實機測試!!! 

@IBActionfuncphoneIcon(sender:AnyObject) {
        if let url = NSURL(string: "tel:\(0912345678)") {
           
UIApplication.sharedApplication().openURL(url)
        }
      

    }

[功能] 製作qrcode

如同之前所提,我們依靠AVFoundation 框架來實作 QR Code 掃描功能。首先,打開ViewController.swift 檔案來導入此框架。
1
import AVFoundation
接著,我們需要實作AVCaptureMetadataOutputObjectsDelegate 協定。我們待會會討論到。現在更新以下這行程式:
1
class ViewController: UIViewController, AVCaptureMetadataOutputObjectsDelegate

繼續往下之前,在ViewController 類別宣告下面的變數。我們稍後會一個接一個說明。
1
2
3
var captureSession:AVCaptureSession?
var videoPreviewLayer:AVCaptureVideoPreviewLayer?
var qrCodeFrameView:UIView?

在viewdidload中放入

 // 取得 AVCaptureDevice 類別的實體來初始化一個device物件,並提供video        // 作為媒體型態參數
     
       
let captureDevice = AVCaptureDevice.defaultDeviceWithMediaType(AVMediaTypeVideo)
     
       
// 使用前面的 device 物件取得 AVCaptureDeviceInput 類別的實體
        var error:NSError?
       
let input: AnyObject! = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: &error)
       
if (error != nil) {
           
// 假如有錯誤產生、 單純記錄其狀況,不再繼續。
            println("\(error?.localizedDescription)")
           
return
        }
     
       
// 初始化 captureSession 物件
        captureSession = AVCaptureSession()
       
// capture session 設定輸入裝置
        captureSession?.addInput(input as! AVCaptureInput)
     
       
// 初始化 AVCaptureMetadataOutput 物件並將其設定作為擷取session的輸出裝置
     
       
let captureMetadataOutput = AVCaptureMetadataOutput()
       
captureSession?.addOutput(captureMetadataOutput)
     
       
// 設定代理並使用預設的調度佇列來執行回呼(call back
        captureMetadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())
        captureMetadataOutput.
metadataObjectTypes = [AVMetadataObjectTypeQRCode]
     
       
// 初始化影像預覽層,並將其加為 viewPreview 視圖層的子層
        videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
       
videoPreviewLayer?.videoGravity = AVLayerVideoGravityResizeAspectFill
       
videoPreviewLayer?.frame = view.layer.bounds
       
view.layer.addSublayer(videoPreviewLayer)
     
       
// 開始影像擷取
        captureSession?.startRunning()
     
       
view.bringSubviewToFront(messageLabel)
       
view.bringSubviewToFront(UpBlack)
       
view.bringSubviewToFront(Black)
       
view.bringSubviewToFront(CameraButton)
       
view.bringSubviewToFront(IconLogo)

// 初始化 QR Code Frame 來突顯 QR code
        qrCodeFrameView = UIView()
       
qrCodeFrameView?.layer.borderColor = UIColor.redColor().CGColor
       
qrCodeFrameView?.layer.borderWidth = 2
       
view.addSubview(qrCodeFrameView!)
        view.bringSubviewToFront(qrCodeFrameView!)
    }
//這個 UIView 在畫面上是看不見的,因為qrCodeFrameView 物件的大小預設是零。接著,倘若QR Code被偵測到,我們將改變他的大小並將其轉成綠色方框。
 
   
func captureOutput(captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [AnyObject]!, fromConnection connection: AVCaptureConnection!) {
       
// 檢查 metadataObjects 陣列是否為非空值,它至少需包含一個物件
        if metadataObjects == nil || metadataObjects.count == 0 {
           
qrCodeFrameView?.frame = CGRectZero
            
qrCodeFrameView?.layer.borderColor = UIColor.greenColor().CGColor
           
messageLabel.text = "No QR code is detected"
           
return
        }
     
       
// 取得元資料(metadata)物件
        let metadataObj = metadataObjects[0] as! AVMetadataMachineReadableCodeObject
       
if metadataObj.type == AVMetadataObjectTypeQRCode {
         
           
//倘若發現的原資料與 QR code 原資料相同,便更新狀態標籤的文字並設定邊界
            let barCodeObject = videoPreviewLayer?.transformedMetadataObjectForMetadataObject(metadataObj as
               
AVMetadataMachineReadableCodeObject) as! AVMetadataMachineReadableCodeObject
           
qrCodeFrameView?.frame = barCodeObject.bounds;
           
if metadataObj.stringValue != nil {
                messageLabel.text = metadataObj.stringValue;
          //這邊還可放入function,例如放入app(),即可換頁(參考"換頁並傳遞變數文章segue")
            }
        }
    }



[小技巧]自定義navigation item 返回按鈕圖示

//讓返回沒有文字顯示
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
     
//設置返回按鈕圖示
self.navigationController!.navigationBar.backIndicatorImage = UIImage(named:"icon_page.png")!
       self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = UIImage(named:"icon_page.png")!

//另外可以改顏色
 var nav = self.navigationController?.navigationBar
        
        nav?.barStyle = UIBarStyle.Black
        nav?.tintColor = UIColor.greenColor()

//如要改特定顏色,可以查詢色碼,上述的barStyle那一行變成
nav?.barTintColor = UIColor(red:0.24, green:0.23, blue:0.22, alpha:1.0)





[功能]查詢object種類

秘訣:用.dynamicType函數

以下為舉例,想要拿出Key=Picture的種類:


      println(detail.objectForKey("Picture")!.dynamicType)

[功能]按下按鈕並變換按鈕圖片

//宣告一個按鈕
@IBOutletweakvar clickButtonImage: UIButton!

//宣告一個按鈕動作
 @IBAction func clickButton(sender: AnyObject) {

//當點下去選擇後,變成反選擇,同樣的反選擇點下去後變成選擇
       
clickButtonImage.selected = !clickButtonImage.selected

//執行store_select這個function
       
store_select()
    }


//設置store_select這個function

func store_select(){
     
//設置沒選擇時的圖片與被選擇後的圖片     
clickButtonImage.setImage(UIImage(named:"ui__fc_n_plus"),forState:UIControlState.Normal)
       
clickButtonImage.setImage(UIImage(named:"ui__fc_n_minus"),forState:UIControlState.Selected)

    }