공부하는 Introducing iOS8 의 Chapter 9 에 나오는 Selfie App 입니다.
우선 Main.storyboard를 이용해서 아래와 같은 화면을 만드세요.
가운데는 Image View 이고 왼쪽 오른쪽은 Bar Button Item 입니다.
import UIKit
import Social
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@IBOutlet weak var myImageView: UIImageView!
@IBAction func selfieTapped(sender: AnyObject) {
var imagePicker = UIImagePickerController()
imagePicker.delegate = self
if UIImagePickerController.isSourceTypeAvailable(.Camera){
imagePicker.sourceType = .Camera
if(UIImagePickerController.isCameraDeviceAvailable(.Front)) {
imagePicker.cameraDevice = .Front
} else {
imagePicker.cameraDevice = .Rear
}
} else {
imagePicker.sourceType = .PhotoLibrary
}
self.presentViewController(imagePicker, animated: true, completion: nil)
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [NSObject : AnyObject]?) {
myImageView.image = image
self.dismissViewControllerAnimated(true, completion: nil)
}
@IBAction func shareTapped(sender: AnyObject) {
var social = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
social.addImage(myImageView.image)
self.presentViewController(social, animated: true, completion: nil)
}
}
우선 Facebook에 접속할 거니까 Social 을 import 합니다.
그리고 클래스 선언하는데에 UIImagePickerControllerDelegate, UINavigationControllerDelegate 를 추가합니다.
그리고 Take Selfie 와 Share button 들에 대한 함수를 만듭니다. Connection을 Outlet 이 아닌 Action으로 선택하면 됩니다.
각각 selfieTapped 와 shareTapped 라는 함수를 만듭니다.
그리고 가운데 사진이 들어갈 Image View에 대한 객체도 만들구요.
여기서는 함수 이름을 imagePicker로 했습니다.
일단 selfieTapped 함수를 보면 UIImagePickerController() 에 대한 객체를 만들어서 delegate를 현재의 view로 설정합니다. (self)
그리고 if 문을 사용해서 Camera가 가능한지 여부를 체크하구요.
가능하면 또 다시 전면이 가능한지 체크를 합니다. 전면 카메라가 가능하지 않으면 후면 카메라를 지정하고 가능하면 전면 카메라를 지정합니다.
그리고 만약에 카메라 자체가 가능하지 않으면 전면 후면 확인할 필요 없이 그냥 Photo Library 를 지정합니다.
마지막 줄은 image Picker를 화면 전체에 표시하는데 밑에서부터 위로 올라오도록 설정한 겁니다.
그러면 Take Selfie 버튼을 눌렀을 때 카메라를 찍을 수 있는 화면이 나오는 설정을 한 겁니다. (카메라 기능이 없으면 Photo Library 가 나오구요.)
다음은 didFinishPickingImage delegate method 를 추가 합니다.
이 메소드는 사전에 Swift에 정의된 메소드 입니다. 이 메소드는 사용자가 사진을 찍었거나 Photo Library에서 사진을 선택 했을 때 호출 됩니다.
두번째 image 파라미터에 사진이 전달되게 되는 겁니다.
함수 내용을 보면 첫번째 줄에서 파라미터로 전달받은 image를 myImageView 의 image로 받습니다.
이렇게 받은 다음에 imagePicker가 없어지도록 합니다.
이러면 사진을 찍고 그 사진을 imagePicker에 받는 것까지 마친겁니다.
이제 이 사진을 맘대로 다룰 수가 있는데요.
이 앱에서는 Facebook으로 보낼 겁니다.
이 기능은 사용자가 Share 버튼을 누를 경우 일어나게 됩니다.
그러니까 shareTapped 함수 안에 코딩을 해야 되겠죠.
일단 서비스 타입을 Facebook으로 한 SLComposeViewController를 만듭니다. 그 변수 이름은 social 이구요.
그리고 그 controller 에 아까 받았던 이미지를 추가합니다.
마지막 줄은 SLComposeViewController 가 표시되도록 한 겁니다.
여기까지 진행이 되면 위와 같은 화면이 나오는데요.
이건 제 컴의 에뮬레이터로 실행한 겁니다. Facebook 이 setting 돼 있지 않아서 직접 Post 는 안되는데 아마 Setting을 하면 Posting 까지 될 겁니다.
'iOS > swift' 카테고리의 다른 글
[Swift] Table View 만들기 (0) | 2015.10.15 |
---|---|
[Swift] Social Network Service (Facebook, Twitter) (0) | 2015.09.19 |
[Swift] 카메라와 사진 다루기 (Camera and Photo) (0) | 2015.09.19 |
[Swift] 현재 위치 맵에 표시하기 (0) | 2015.09.14 |
[Swift] 현재 위치 정보 다루기 (0) | 2015.09.14 |
Tutorial: How to use Auto Layout in Xcode 6 (0) | 2015.08.27 |
swift Memo (0) | 2015.08.26 |
swift 함수 사용 예제 (0) | 2015.08.25 |