add multi addObserver for KVO

ios 2017. 7. 16. 16:17

using addObserver function to observe one or more specific values, should be able to separate values.


ex. If we have Label1 and Label2, we don't know what is Label1's value in observeValue function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// define two UILabel
@IBOutlet var label1: UILabel!
@IBOutlet var label2: UILabel!
 
// add addObserver to each label
label1.addOberver(self, forKeyPath: "text", options: [.old, .new], context: nil)
label2.addOberver(self, forKeyPath: "text", options: [.old, .new], context: nil)
 
// value watch through observeValue
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "text" {
        print("old text : ", change?[.oldKey])
        print("new text : ", change?[.newKey])
    }
}
cs


In above observeValue, It is hard to know what is label1's value.


To solve this problem, we can use context parameter in addObserver.


context means Arbitrary data that is passed to observer in.


Using context parameter, we can solve this problem.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// label1, label2 data for context
private static var label1 = 0
private static var label2 = 1
 
// define two UILabel
@IBOutlet var label1: UILabel!
@IBOutlet var label2: UILabel!
 
// add context argument data 
label1.addOberver(self, forKeyPath: "text", options: [.old, .new], context: &MyClass.label1)
label2.addOberver(self, forKeyPath: "text", options: [.old, .new], context: &MyClass.label2)
 
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    // using context value, classify each label's value
    if context == &label1 {
        print("old label1 text : ", change?[.oldKey])
        print("new label1 text : ", change?[.newKey])
    } else if context == &label2 {
        print("old label2 text : ", change?[.oldKey])
        print("new label2 text : ", change?[.newKey])    
    } 
}
cs


Posted by 사용자 guru_k

댓글을 달아 주세요

You have to install latest verstion of UnityAds


https://www.assetstore.unity3d.com/en/#!/content/66123

Posted by 사용자 guru_k

댓글을 달아 주세요

1. Click the link below and  Download Play Games C++ SDK Version 2.1


https://developers.google.com/games/services/downloads/sdks



2. Unzip package downloaded.



3. Add file gpg.framework





※ You have to check 'if items if needed'




4. Rebuild


Posted by 사용자 guru_k

댓글을 달아 주세요

1. Click the link below and  Download Package


https://developers.google.com/identity/sign-in/ios/sdk/


2. Unzip package downloaded.


3. Add file GoogleSignIn.framework




※ You have to check 'if items if needed'



4. Rebuild


Posted by 사용자 guru_k

댓글을 달아 주세요

1. Click the link below and  Download Package


https://firebase.google.com/docs/admob/ios/download



2. Unzip package downloaded.


3. Add file .framework



※ You have to check 'if items if needed'



4. Rebuild



Posted by 사용자 guru_k

댓글을 달아 주세요

버튼을 클릭 시 새로운 화면으로 전환되는 이벤트를 실행합니다.




1. AppDelegate.swift에 메인 페이지인 ViewController를 rootViewController로 설정합니다.


AppDelegate.swift

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class AppDelegate: UIResponder, UIApplicationDelegate {
 
    var window: UIWindow?
    var naviController : UINavigationController?
 
    func application(application: UIApplication, 
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.naviController = UINavigationController(rootViewController: ViewController())
        self.naviController?.navigationBar.hidden = true
        self.window?.rootViewController = self.naviController
        self.window?.makeKeyAndVisible()
        
        return true
    }
}
cs


2. 페이지가 전환될 새로운 Controller를 생성합니다. 저는 NewController.swift로 생성하였습니다. 새로운 페이지를 위한 백그라운드 색상과 텍스트를 변경하였습니다.


NewController.swift

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import UIKit
 
class NewController: UIViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // BackGround Color -- R, G, B, Alpha
        self.view.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 0.3)
        
        
        //------------
        // TEXT
        
        // Get width, height Size
        var width : CGFloat = self.view.frame.size.width
        var height : CGFloat = self.view.frame.size.height
        
        // Title UILabel
        var titleTxt = UILabel(frame: CGRectMake(00, width, height/6))
        // Text
        titleTxt.text = "New Page"
        // Alignment
        titleTxt.textAlignment = NSTextAlignment.Center
        // Font
        titleTxt.font = UIFont(name: "System", size: 40)
        // Color
        titleTxt.textColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        
        // Display
        self.view.addSubview(titleTxt)
      
        //------------------   
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
cs



3. 앞서 생성했던 버튼 이벤트에 새로운 Controller로 변경하는 부분을 추가해줍니다.


ViewController.swift

 

1
2
3
4
5
6
     // btn ClickEvent
    func touchBtn(sender : UIButton){
        //새로운 Controller로 뷰 이동
        self.navigationController?.pushViewController(NewController(), 
animated: false)
 
    }
cs
 


출력 화면







Posted by 사용자 guru_k

댓글을 달아 주세요

텍스트 만들기에 이어 버튼 만들기 입니다.


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var btn = UIButton()
 
// btn width, height Size -- 버튼 크기 설정
btn.frame.size.width = 50
btn.frame.size.height = 50
// btn alignment Center -- 중앙 정렬
btn.frame = CGRectMake(width/2 - btn.frame.size.width/2
height/2 - btn.frame.size.height/2
btn.frame.size.width, 
btn.frame.size.height);
// btn Background Color -- 백그라운드 색상 설정
btn.backgroundColor = UIColor(red: 0.5, green: 0.5, blue: 0.5, alpha: 1)
// btn cornerRadius -- 버튼 코너 설정
btn.layer.cornerRadius = 10
// btn setTitle -- 버튼 내 text 설정
btn.setTitle("클릭", forState: UIControlState.Normal)
// btn addTarget -- 타겟 설정
btn.addTarget(self, action: Selector("touchBtn:"), 
forControlEvents: UIControlEvents.TouchDown)
 
// display       
self.view.addSubview(btn)
cs



* 앞 부분 텍스트 만들기에 이어서 진행되었기에 btn.frame 부분의 width와 height는 view.frame의 사이즈를 저장해논 변수 입니다.

var width : CGFloat = self.view.frame.size.width

var height : CGFloat = self.view.frame.size.height


출력 화면



Posted by 사용자 guru_k
TAG ios, iosapp, Swift

댓글을 달아 주세요

백그라운드 색상 변경하기 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import UIKit
 
class ViewController: UIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // BackGround Color -- R, G, B, Alpha
        self.view.backgroundColor = UIColor(red: 0.9, green: 0.3, blue: 0.5, alpha: 0.3)
        
        // Get width, height Size
        var width : CGFloat = self.view.frame.size.width
        var height : CGFloat = self.view.frame.size.height
        
        // Title UILabel
        var titleTxt = UILabel(frame: CGRectMake(0, height/2, width, height/6))
        // Text
        titleTxt.text = "Hello Swift"
        // Alignment
        titleTxt.textAlignment = NSTextAlignment.Center
        // Font
        titleTxt.font = UIFont(name: "System", size: 40)
        // Color
        titleTxt.textColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        
        // Display
        self.view.addSubview(titleTxt)
        
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
 
}
cs


- 추가 부분


self.view.backgroundColor = UIColor(red: 0.9, green: 0.3, blue: 0.5, alpha: 0.3)



- 출력 결과 화면





Posted by 사용자 guru_k

댓글을 달아 주세요

프로젝트를 생성한 후 UILable 을 이용하여 Text를 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import UIKit
 
class ViewController: UIViewController {
 
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
 
        
        // Get width, height Frame Size -- 프레임의 가로와 세로 사이즈
        var width : CGFloat = self.view.frame.size.width
        var height : CGFloat = self.view.frame.size.height
        
        // Title UILabel -- UILabel 생성 후 크기 조정
        var titleTxt = UILabel(frame: CGRectMake(0, height/2, width, height/6))
        // Text -- 텍스트 설정
        titleTxt.text = "Hello Swift"
        // Alignment
        titleTxt.textAlignment = NSTextAlignment.Center
        // Font
        titleTxt.font = UIFont(name: "System", size: 40)
        // Color
        titleTxt.textColor = UIColor(red: 1, green: 1, blue: 1, alpha: 1)
        
        // Display
        self.view.addSubview(titleTxt)
        
    }
 
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
 
 
}
cs


CGRectMake 


파라메터를 입력받아 사각형을 만든다.


func CGRectMake(_ xCGFloat_ yCGFloat_ widthCGFloat_ heightCGFloat) -> CGRect


Parameter


x : x축 시작점

y : y축 시작점

width : 사각형의 가로 크기

height : 사각형의 세로 크기


참조 : 



-출력 결과 화면 




Posted by 사용자 guru_k

댓글을 달아 주세요