私は罠に陥ってしまい、すべてをリファクタリングするのは遅すぎる。ここで説明するには時間がかかりすぎますが(有効ですが、コードベースはうまく動作します)、メソッドの1つとして戻り値としてUIImageViews
を抽象化し、代わりにプロコルを返します。 このプロトコルはViewable
と呼ばれ、5つのプロパティしかありません。 rectの座標を変換する別の方法はありますか?
protocol Viewable {
var image: UIImage { get }
var bounds: CGRect { get }
var center: CGPoint { get }
var contentMode: UIViewContentMode { get }
var hidden: Bool { get set }
}
閲覧可能
がUIView
階層で表示できるビュー、そこに何も特別な..です問題は、以下の通りです:
は私がより良いセマンティクスを持つ便利なメソッドを持つことができるように、このプロトコルを拡張する必要がありますそれは異なる親座標系で見ることのできる座標を計算する。
普通のUIView
のコードはこのようになりますが、うまくいきます。
extension UIView {
func frame(inCoordinatesOfView parentView: UIView) -> CGRect {
let frameInWindow = UIApplication.applicationWindow.convertRect(self.bounds, fromView: self)
return parentView.convertRect(frameInWindow, fromView: UIApplication.applicationWindow)
}
}
しかし、私はもちろん、この
extension Viewable {
func frame(inCoordinatesOfView parentView: UIView) -> CGRect {
let frameInWindow = UIApplication.applicationWindow.convertRect(self.bounds, fromView: self)
return parentView.convertRect(frameInWindow, fromView: UIApplication.applicationWindow)
}
}
を行う際に一部fromView:self
がコンパイルされませんので、それは動作しません。そのタイプはUIView
ではなく、Viewable
であると予想されます。
は、だから私のヘッダに戻るには、UIViewsを参照することなく、座標を計算する方法ではなく、それが唯一のCGRect
の& CGPoint
秒を扱う純粋数学の式のようになり、あるのでしょうか?
悪魔は、彼らが言うように詳細にあります:)。 Viewableは常にUIView(またはそのサブクラス)ではなく、AsyncDisplayKitのASDisplayNodeでもかまいません。 –