我的应用程序有一个视图控制器,可以像这样设置预览视图、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当然更好,但这是一个单独的问题。