使用Rxswift绑定两个UIview fram / Position

时间:2017-05-17 12:22:09

标签: ios swift uiview rx-swift rx-cocoa

view1 位置发生变化时,我想自动更改 view2 位置,并使用Rxswift绑定两个视图位置。

我尝试使用此

观察视图帧/位置
view.rx.observe(CGRect.self,"frame")
        .subscribe(onNext: {
            print($0 ?? (0,0))
        })

在初始时打印框架但在使用约束更改视图位置时

self.constraintHorizontalCenterView.constant = 1000

它没有打印意味着这段代码没有观察到视图位置...

有没有办法观察连续观察位置或绑定视图位置?

3 个答案:

答案 0 :(得分:1)

来自apple' 框架' // animatable. do not use frame if view is transformed since it will not correctly reflect the actual location of the view. use bounds + center instead.

您可以观察绑定或居中。

答案 1 :(得分:1)

无论镜框是否反映了实际位置,您都可以通过这样的镜框进行观察。

这是旧帖子,但我分享了我的代码。它可以正常工作。

   self.mapView
            .rx
            .observe(CGRect.self, #keyPath(UIView.frame))
            .asDriver(onErrorJustReturn: CGRect.zero)
            .drive(onNext: { (rect) in
                log.debug("Frame changed to \(String(describing: rect))")
            }).disposed(by: self.disposeBag)

在这里,我尝试使用 Driver 观察 mapView 的框架。

希望对您有帮助。

答案 2 :(得分:-1)

UIView.frame不符合KVO标准,因此您无法直接观察它。无论如何,这样做是不合适的恕我直言。

某些事件导致您的视图更改大小。请注意这一点。