我的应用程序有一个视图控制器,可以像这样设置预览视图、capturedImage和CapturedImageView

class ViewController: UIViewController, AVCaptureFileOutputRecordingDelegate, UIGestureRecognizerDelegate {
    @IBOutlet weak var previewView: AVCamPreviewView!

    var capturedImage: UIImage!
    var capturedImageView: UIImageView!
}

预览视图位于main.storyboard上,但capturedImage和CapturedImageView不在。我希望capturedImageView的大小与previewView的大小完全相同,因此通常我会执行类似于let capturedImageView = UIImageView(frame: self.previewView.frame)
但我似乎无法在函数之外使用这种语法。另外,我不确定预览视图是否真的存在,让我能够做到这一点…
它抱怨Value of type 'NSObject -> () -> ViewController' has no member 'previewView'
所以我觉得不是
所以也许我可以在取景后做?但我又不认为我能用self.capturedImageView = UIImageView(frame: self.previewView.frame)
当我尝试的时候,我收到了一条长发的错误信息(应用程序冻结了):
function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded> of Swift.(_fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()).(closure #2)

有什么建议吗?

最佳答案

我不确定你到底想做什么-在你给出的代码中,你没有实例化任何东西。
如果您试图用视图控制器中的声明直接实例化capturedImageView,并引用同一视图控制器中的另一个属性,那么您将无法执行此操作,因为只有在完全实例化后才能引用self(即视图控制器),并且在此之前必须对其所有属性进行完全初始化。
因此,您要么在没有帧的情况下实例化capturedImageView(因此不引用self),然后在稍后设置其帧(例如在viewDidLoad中),要么可以将capturedImageView设置为一个惰性属性(然后可以引用self,因为它只在视图控制器完全实例化之后才被实例化)。
如果要使视图的框架彼此相等,使用autolayout当然更好,但这是一个单独的问题。

07-24 09:36