스토리 보드 팁


스토리보드 사용시 깔끔하게 나누는 방법

https://brunch.co.kr/@joonwonlee/5


http://theeye.pe.kr/archives/2292

extension Array {
    func mapArray<T>(_ transform: (Array) -> T) -> T {
        return transform(self)
    }
}

Then you can pass in the Set initializer to the new mapArray function

objectArray
    .map({ $0.URL })
    .mapArray(Set.init)


출처 : http://codeman77.tistory.com/82


import UIKit;


// 홀수 집합

let oddNumberSet : Set = [ 13579 ];

// 짝수 집합

let evenNumberSet : Set = [ 02468 ];

// 소수 집합

let primeNumberSet : Set = [ 2357 ];


// 연산 결과를 저장할 집합

var resultNumberSet : Set = Set<Int>();


// 교집합(Intersection) :  집합의 공통된 요소

print("홀수짝수 교집합");

resultNumberSet = oddNumberSet.intersection(evenNumberSet);

// []

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


print("홀수소수 교집합");

resultNumberSet = oddNumberSet.intersection(primeNumberSet);

// [ 3, 5, 7 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


// 차집합(Subtract) : 한쪽 집합에만 있는 요소

print("홀수짝수 차집합");

resultNumberSet = oddNumberSet.subtracting(evenNumberSet);

// [ 1, 3, 5, 7, 9 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


print("홀수소수 차집합");

resultNumberSet = oddNumberSet.subtracting(primeNumberSet);

// [ 1, 9 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


// 합집합(Union) : 양쪽 집합에 있는 모든 요소

print("홀수짝수 합집합");

resultNumberSet = oddNumberSet.union(evenNumberSet);

// [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


print("홀수소수 합집합");

resultNumberSet = oddNumberSet.union(primeNumberSet);

// [ 1, 2, 3, 5, 7, 9 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


// 대칭차(Symmetric Difference) :  집합의 상대 여집합의 합집합에서 교집합을  

print("홀수짝수 대칭차");

resultNumberSet = oddNumberSet.symmetricDifference(evenNumberSet);

// [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


print("홀수소수 대칭차");

resultNumberSet = oddNumberSet.symmetricDifference(primeNumberSet);

// [ 1, 2, 9 ]

for i in resultNumberSet.sorted(){

    print(i);

}

resultNumberSet.removeAll();

print();


실행 결과

실행 결과



출처: http://codeman77.tistory.com/82 [☆]

출처: http://codeman77.tistory.com/82 [☆]

출처 : http://mtsparrow.blogspot.kr/2016/02/swift-5-days-ago.html


몇일전
몇시간전
몇분전

등등...

이런 정보를 표시해야 하는 경우가 있다.

NSDate의 extension으로 다음과 같이 구현 한다음

이를 이용하면 가능 하다.

import Foundation

extension NSDate {
    func yearsFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Year, fromDate: date, toDate: self, options: []).year
    }
    func monthsFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Month, fromDate: date, toDate: self, options: []).month
    }
    func weeksFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.WeekOfYear, fromDate: date, toDate: self, options: []).weekOfYear
    }
    func daysFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Day, fromDate: date, toDate: self, options: []).day
    }
    func hoursFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Hour, fromDate: date, toDate: self, options: []).hour
    }
    func minutesFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Minute, fromDate: date, toDate: self, options: []).minute
    }
    func secondsFrom(date:NSDate) -> Int{
        return NSCalendar.currentCalendar().components(.Second, fromDate: date, toDate: self, options: []).second
    }
    func offsetFrom(date:NSDate) -> String {
        if yearsFrom(date)   > 0 { return "\(yearsFrom(date))y"   }
        if monthsFrom(date)  > 0 { return "\(monthsFrom(date))M"  }
        if weeksFrom(date)   > 0 { return "\(weeksFrom(date))w"   }
        if daysFrom(date)    > 0 { return "\(daysFrom(date))d"    }
        if hoursFrom(date)   > 0 { return "\(hoursFrom(date))h"   }
        if minutesFrom(date) > 0 { return "\(minutesFrom(date))m" }
        if secondsFrom(date) > 0 { return "\(secondsFrom(date))s" }
        return ""
    }


}

사용하는 방법은 다음과 같다.

lastSportData.year, mont, day 값을 NSDate로 만들어서 현재 NSDate와의 몇일 차이인지 문자열을 만든다.

            let date = NSDate()
            let day = date.daysFrom(makedate(lastSportData.year, month: lastSportData.month, day: lastSportData.day))
            if day > 0 {
                agoLabel.text = "\(day)days ago"
            } else {
                agoLabel.text = "today"
            }


'IOS > 예제모음' 카테고리의 다른 글

swift array to Set  (0) 2017.07.17
swift 연산자 모음 예제들  (0) 2017.07.17
권한 예제 모음  (0) 2017.04.25
swift 카메라 및 갤러리 접근 코드 소스  (0) 2017.04.20
swift 화면 이동  (0) 2017.04.18

출처 : http://blog.daum.net/hans1991/3

최근에 업데이트 된 xcode 8로 앱을 앱스토에 업로드할 경우 앱에서 사용되는 권한을 info.plist에 반드시 지정해야 합니다.

이를 설정하지 않고

    1. 앱을 itunesconnect에 업로드할 경우 오류로 인하여 정상등록되지 않고 해당 애플 계정으로 오류 메일이 전송됩니다.

    2. iOS 10 디바이스에서 실행할 경우 권한을 필요로 하는 곳에서 앱이 죽는 현상이 발생합니다.


* info.plist에 권한 추가하기

   1) 포토앨범 사용하는 경우  : "Privacy - Photo Library Usage Description" 키 추가

   2) 카메라를 사용하는 경우 : "Privacy - Camera Usage Description"  키 추가

   3) 주소록을 사용하는 경우 : "Privacy - Contacts Usage Description" 키 추가

   4) 음악을 사용하는 경우 : "Privacy - Music Usage Description" 키 추가

   5) 우치기반, Bluetooth, 달력 등.....을 사용할 경우에도 해당 권한을 추가해 줘야 합니다... 


  각 키를 추가한 다음에 description을 지정해 줘야 하는데(꼭 필요한 것은 아님 꼭 필요하네요. 이걸 추가하지 않으면 심사를 위해 앱을 등록할 때 오류가 발생합니다..) 여기에 사용된 문자열이 권한을 요구할 때 같이 표시됩니다.


 #참고...  info.plist 에 키 등록 후 description 등록된 모습

   

 [그림1] Description이 없는 경우                                  [그림2] Description이 있는 경우


import UIKit
 
class ViewController: UIViewController,
    UIImagePickerControllerDelegate,
    UINavigationControllerDelegate
{
    let picker = UIImagePickerController()
    @IBOutlet weak var myImageView: UIImageView!
     
    @IBAction func photoFromLibrary(_ sender: UIBarButtonItem) {
        picker.allowsEditing = false
        picker.sourceType = .photoLibrary
        picker.mediaTypes = UIImagePickerController.availableMediaTypes(for: .photoLibrary)!
        picker.modalPresentationStyle = .popover
        present(picker, animated: true, completion: nil)
        picker.popoverPresentationController?.barButtonItem = sender
    }
     
    @IBAction func shootPhoto(_ sender: UIBarButtonItem) {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            picker.allowsEditing = false
            picker.sourceType = UIImagePickerControllerSourceType.camera
            picker.cameraCaptureMode = .photo
            picker.modalPresentationStyle = .fullScreen
            present(picker,animated: true,completion: nil)
        } else {
            noCamera()
        }
    }
    func noCamera(){
        let alertVC = UIAlertController(
            title: "No Camera",
            message: "Sorry, this device has no camera",
            preferredStyle: .alert)
        let okAction = UIAlertAction(
            title: "OK",
            style:.default,
            handler: nil)
        alertVC.addAction(okAction)
        present(
            alertVC,
            animated: true,
            completion: nil)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        picker.delegate = self
    }
 
    //MARK: - Delegates
    func imagePickerController(_ picker: UIImagePickerController,
        didFinishPickingMediaWithInfo info: [String : AnyObject])
    {
        var  chosenImage = UIImage()
        chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage //2
        myImageView.contentMode = .scaleAspectFit //3
        myImageView.image = chosenImage //4
        dismiss(animated:true, completion: nil) //5
    }
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
       dismiss(animated: true, completion: nil)
    }
 
}


'IOS > 예제모음' 카테고리의 다른 글

swift 로 몇분전,몇시간전등으로 표기하는 예제  (0) 2017.05.11
권한 예제 모음  (0) 2017.04.25
swift 화면 이동  (0) 2017.04.18
IOS 멋진 예제 모음 사이트  (0) 2017.04.17
이미지 체인저를 이용한 소스  (0) 2017.02.11

storyboard 를 사용해서 간단하게 화면이동이 가능하지만, 조건문과 함께 사용할때는 코드로 이동하는 것이 편할때가 있다.


같은 스토리보드내에 있는 다른 뷰로 이동하는 경우

// nextViewController.swift 인 경우

let storyboard: UIStoryboard = self.storyboard!

let nextView = storyboard.instantiateViewController(withIdentifier: "nextViewController")

self.present(nextView, animated: true, completion: nil)



현재와 다른 스토리보드에 있는 뷰로 이동하는 경우

xcode 상에서 is Initial View Controller 에 체크를 해도 되지만,

아래와 같이 name 파라미터에 스토리보드의 이름을 넣어도 된다.


// 파일명이 Next.storyboard 인 경우

let storyboard: UIStoryboard = UIStoryboard(name: "Next", bundle: nil)

let nextView = storyboard.instantiateInitialViewController()

self.present(nextView!, animated: true, completion: nil)



출처: http://geguri.tistory.com/45 [개구리의 IT공간]

출처: http://geguri.tistory.com/45 [개구리의 IT공간]

class ViewController: UIViewController {

    @IBOutlet weak var imgMain: UIImageView!

    @IBOutlet weak var btnPrev: UIButton!

    @IBOutlet weak var btnNext: UIButton!

    var idx = 0

    

    var array_img = ["img1.jpeg" , "img2.jpeg" , "img3.jpeg"]


    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        initView(_pos : 0);

    }

    

    func initView(_pos : Int){

        print( "current pos -> \(_pos)" )

        imgMain.image = UIImage(named: array_img[_pos]);

    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }


    @IBAction func showPrevPrc(_ sender: Any) {

        idx -= 1

        if ( idx < 0 ){

         idx = array_img.count - 1

        }

        

        

        initView(_pos: idx);

    }

    

    @IBAction func showNextPrc(_ sender: Any) {

        idx += 1

        if(idx >= array_img.count){

            idx = 0;

        }

        

        initView(_pos: idx);

        

    }

    


}

+ Recent posts