본문 바로가기

전체 글236

오디오 녹음 및 재생 AVAudioRecorder & AVAudioPlayer 오디오 녹음기init(URL url: NSURL, settings: [String : AnyObject]) throws로 초기화한다.플레이어는 url만 설정하면 된다. 녹음 환경 설정은 딕셔너리 형태로 한다. 옵션은 아래와 같다.AVFormatIDKey : 녹음 포맷, 코어 오디오에 정의된 포맷 문자 사용AVSampleRateKey : 샘플링 레이트AVLinearPCMBitDepthKey : 녹음에 사용할 비트AVEncoderAudioQualityKey : 녹음 품질 녹음 기능에 관련된 메소드func prepareToRecord() -> Bool // 녹음 준비과정. 파일 생성함.func record() -> Bool // 파일에 녹음 수행하거나 중지func recordForDuration(duratio.. 2015. 10. 29.
Sync, Async, Task 방식으로 이미지 로딩하기 세 가지 방법 중 애플이 권장하는 방법은 Task방식이다. 어차피 기본적으로 싱크로 이미지를 로딩할 일은 없겠지만. task도 기본적으로 비동기이며, Async와 비교해서 장점은.. 음, 글쎄 더 빠른지는 자세히 테스트 해보지 않아서 모르겠다. 하지만 액션 구역이 분할되있기 때문에 아마 동작 제어가 더 낫지 않을까... 안드로이드의 AsyncTask와 가장 비슷한 형태라고 보인다. 코드는 아래와 같다.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778import UIKit class ViewCo.. 2015. 10. 28.
데이터 저장(UserDefault) 앱을 종료해도 유지할 수 있는 방법들 1. 유저 디폴트(NSUserDefaults) // 싱글톤 객체let defaults = NSUserDefaults.standardUserDefaults() // 내용 저장defaults.setObject("저장할 내용", forKey: "키값") // 싱크 문제가 있기 때문에 싱크로나이즈 해줘야 함(성능 하락...)defaults.synchronize() // objectForKey()등등으로 얻어올 수 있다.let name = defaults.stringForKey("name") 이런 저런 퍼포먼스 저하 문제가 있기 때문에 앱의 설정 등을 저장하는데 주로 쓴다. 안드로이드의 sharedReference뭐시기랑 비슷한 것 사용 예제) 현재 날짜 저장하고 복원1234.. 2015. 10. 27.
세그웨이(코드로 Scene 전환) 스토리보드에서 뷰 컨트롤러를 2개 이상 만들고, 뷰 컨트롤러를 액션이나 아울렛 연결하듯이 다른 뷰 컨트롤러로 연결한다. 연결 방식은 Present Modally로 한다. 그러면 화살표가 연결되고 세그웨이를 호출할 준비가 된다. 코드에서 세그웨이를 컨트롤하는 메소드는 3개이다.123456 // identifier(세그웨이 아이디)에 맞는 세그웨이 실행 self.performSegueWithIdentifier(, sender: ) // 세그웨이가 실행되기 전 호출(데이터를 넘길 때 사용) self.prepareForSegue(, sender: ) // 세그웨이를 실행할지 결정 self.shouldPerformSegueWithIdentifier(, sender: ) -> Boolcs 3개의 메소드를 이용해 데.. 2015. 10. 26.
터치로 그림그리기 커스텀뷰를 활용한다. UIView를 상속한 커스텀뷰에 drawRect()를 오버라이딩 한다. 그 외에는 방법이 여러가지가 있겠지만 touchBegan(), touchMoved()를 오버라이딩해서 시작 포인트를 잡고 이동 포인트를 잡은 뒤 UIBezierPath()에 담고, drawRect()에서 그린다.코드는 아래와 같다. DrawingView.class123456789101112131415161718192021222324252627282930 class DrawingView: UIView { var path = UIBezierPath() override func drawRect(rect: CGRect) { print("drawRect") path.stroke() } override func touche.. 2015. 10. 23.
Multi touch gesture 멀티터치는 기본적으로 탭(싱글클릭을 이용한 두드리기), 끌기(pan), 밀기(swipe), 핀치(pinch), 회전(rotate), 롱 터치, 화면모서리 끌기(screen edge pan)가 제공된다. 사용방법은 멀티터치를 할 뷰에 라이브러리의 제스쳐 인식기(5가지)를 안으로 끌어다놓으면 설정된다. 가장 중요한 것은 xcode에서 기본적으로 멀티터치를 제공하지 않는다는 점이다. 인스펙터에 보면 Interaction 항목에 있는 두 가지를 모두 체크해야 활성화된다. 아래는 제스쳐 인식기를 이용한 기본적인 코드이다. 코드를 보고 활용하면 된다. 간단히 설명하자면, 제스쳐 인식기 객체를 만들고 뷰 컨트롤러를 담는다. 그리고 이미지뷰에 인식기를 등록하고 selector로 지정한 메소드에서 코드를 구현한다. 12.. 2015. 10. 23.
tableVIew의 셀의 index 값을 얻는 방법 인덱스 정보가 필요한 경우는 셀의 버튼을 클릭했을 때 클릭한 셀의 인덱스가 필요하다거나 할 때이다. 하지만 셀 정보에는 인덱스가 없다. 왜냐하면, 셀이 재사용되기 때문이다. 고전적으로 태깅을 하는 방법도 있으나 효율적이지 못하다. 그래서 인덱스를 얻기 위한 메소드를 제공하고 있다. 그래도 비효율적으로 보이지만. 먼저, 셀이 속해있는 뷰의 정보를 얻어온다. 커스텀 셀이면 몇 번 부모뷰를 콜해야 할테고, 아무튼 셀이 있는 곳까지 간 뒤, indexPathForCell(cell: UITableViewCell) -> NSIndexPath? 를 호출한다. 메소드의 리턴타입을 보면 알 수 있듯 인덱스패스가 나온다. 끗. 2015. 10. 23.
이미지 확대/축소 안드로이드는 제스쳐디텍터를 만들어서 별 짓을 다 해야 가능한 이미지 확대 축소가 매우 간단하다. 하면서 안드로이드의 부족함에 분노를 했다. 원리는 이렇다. 스크롤뷰 안에 이미지 뷰가 들어간다. 스크롤뷰에 줌을 설정하고 최소, 최대값을 설정한다. 몇가지 응용을 할 필요가 있는 부분은 나중에 추가로 작성할 예정. 코드는 아래와 같다.1234567891011121314151617181920212223242526272829303132333435363738import UIKit class ViewController: UIViewController, UIScrollViewDelegate { @IBOutlet weak var scrollView: UIScrollView! var imageVIew: UIImageVie.. 2015. 10. 22.
PickerView 피커를 사용하기 위해서는 데이터소스와 델리게이트를 설정하면 된다. 데이터소스를 통해 컴포넌트와 로우(row)의 갯수를 알아오고, 델리게이트를 통해 로우에 데이터를 뿌려준다. 1234567891011121314151617181920 class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { @IBOutlet weak var button: UIButton! @IBOutlet weak var picker: UIDatePicker! var mTime : Double = 0 func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 }.. 2015. 10. 21.