KVO의 사용, 실용 사례: 탐색 모음 배경색 점차적 변화
기본 유형의 속성 수신
주의: 감청하는 속성은dynamic 수식자가 필요합니다.이 견본은 rx를 사용해야 합니다.observe Weakly, rx를 사용할 수 없습니다.observe, 그렇지 않으면 순환 인용을 초래하고 메모리 유출을 일으킬 수 있습니다.
let disposeBag = DisposeBag()
@objc dynamic var message = "hangge.com"
override func viewDidLoad() {
super.viewDidLoad()
// (1 )
Observable.interval(1, scheduler: MainScheduler.instance)
.subscribe(onNext: { [unowned self] _ in
//
self.message.append("!")
}).disposed(by: disposeBag)
// message
_ = self.rx.observeWeakly(String.self, "message")
.subscribe(onNext: { (value) in
print(value ?? "")
})
}
뷰 치수 변경 수신
주의: 여기는 rx를 사용해야 합니다.observe, rx를 사용하면.observeWeakly는 감청이 안 돼요.
override func viewDidLoad() {
super.viewDidLoad()
// frame
_ = self.rx.observe(CGRect.self, "view.frame")
.subscribe(onNext: { frame in
print("--- ---")
print(frame!)
print("
")
})
}
그래디언트 탐색 모음 효과
키코드// kvo
_ = self.tableView.rx.observe(CGPoint.self, "contentOffset")
.subscribe(onNext: {[weak self] offset in
var delta = offset!.y / CGFloat(64) + 1
delta = CGFloat.maximum(delta, 0)
self?.barImageView?.alpha = CGFloat.minimum(delta, 1)
})
import UIKit
import RxSwift
import RxCocoa
class ViewController: UIViewController {
var tableView:UITableView!
////
var barImageView:UIView?
let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
//
self.navigationController?.navigationBar.barTintColor = .orange
//
self.barImageView = self.navigationController?.navigationBar.subviews.first
//
self.tableView = UITableView(frame: self.view.frame, style:.plain)
//
self.tableView!.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
self.view.addSubview(self.tableView!)
//
let items = Observable.just(Array(0...100).map{ " \($0)"})
// ( cellForRowAt )
items.bind(to: tableView.rx.items) { (tableView, row, element) in
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
cell.textLabel?.text = "\(element)"
return cell
}
.disposed(by: disposeBag)
// kvo
_ = self.tableView.rx.observe(CGPoint.self, "contentOffset")
.subscribe(onNext: {[weak self] offset in
print(offset?.y ?? 0.0)
var delta = offset!.y / CGFloat(64)
delta = CGFloat.maximum(delta, 0)
self?.barImageView?.alpha = CGFloat.minimum(delta, 1)
})
}
}
참고 문서: Swift - RxSwift의 사용 상세 설명 64(키 값은 KVO의 사용을 관찰)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.