기존 스크롤뷰의 컨텐츠 사이즈가 변경될때마다 작업을 해야하는게 있어서 어떻게 해줄까 고민하다
스크롤뷰에
horizentalScrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)
해주고 observeValue 를 override해줘서 받을 수 있다는 내용 그대로 따라해 준적이 있다.
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
if let obj = object as? UIScrollView, obj == self.horizentalScrollView && keyPath == "contentSize" {
// 작업 내용
}
}
오브젝트에 컨텐츠 사이즈 라는 키로 .new 될때마다 옵저브 벨류에서 받아서 해줄수 있구나 라며 기뻐했건만
Lint 작업을 추가하면서 이걸 변경해야되는 일이 생겼다.
Block Based KVO Violation: Prefer the new block based KVO API with keypaths when using Swift 3.2 or later. (block_based_kvo)
라며 이건 옛날 스타일이라며 나를 갈구는 xcode의 메시지에 이걸 그냥 비활성화 해줄까 고민하다 방법을 찾았다.
나는 옵저버 추가를 viewdidload에서 해줬었는데 아래와 같이 변경해줬다.
var scrollViewContentSizeObserver: NSKeyValueObservation?
override func viewDidLoad() {
...
scrollViewContentSizeObserver = horizentalScrollView.observe(\.contentSize, options: [.new], changeHandler: { view, change in
// 작업 내용
})
...
}
혹시 동작을 안할까봐 걱정을 많이 했으나 시뮬레이터 상에서는 멀쩡히 돌아가서 다행이다.
솔직히 저 contentSize 집어 넣는 부분이 아직도 잘 이해가 안간다.
누가 알려줄 사람은 없나
반응형
'iOS > swift' 카테고리의 다른 글
XCTest, textFields["passwordTextField"] 는 찾을 수 없다. (0) | 2022.10.31 |
---|---|
Alamofire.AFError Code (0) | 2022.10.06 |
Date 끼리의 비교 (0) | 2022.08.04 |
bringSubviewToFront(_:) (0) | 2022.06.29 |
error, building for iOS Simulator, but linking in object file built for iOS, ~ for architecture arm64 (1) | 2022.06.29 |