在自定义 View 类中使用 UIImageView 的正确方法

Posted

技术标签:

【中文标题】在自定义 View 类中使用 UIImageView 的正确方法【英文标题】:Proper way to use UIImageView inside a custom View class 【发布时间】:2017-03-18 19:19:58 【问题描述】:

我想在我的自定义视图上使用 Appearable 协议中的方法。

protocol Appearable  

extension Appearable where Self: UIView  

    func appear(duration: Double, delay: Double) 
        self.alpha = 0

        UIView.animate(withDuration: duration, delay: delay, options: .curveEaseIn, animations: 
            self.alpha = 1
            self.transform = CGAffineTransform(scaleX: 2.0, y: 1.5)
        , completion: nil)

        self.transform = CGAffineTransform.identity
    

我的自定义视图:

class CustomView: UIView, Appearable 

在我的 MainView 中,我创建了一个带有我想在屏幕上显示的图像的变量。

class MainView: UIView 
    let randomView: CustomUIView = 
    var image = CustomUIView()
    image = UIImageView(image: myImage)

    return image

此代码将不起作用,因为无法将“UIImageView”类型的值分配给“CustomView”类型。我的问题是,进行这种操作的正确方法是什么。

【问题讨论】:

【参考方案1】:

为什么不创建一个 CustomImageView 类并遵守 Appearable 协议?

class CustomImageView: UIImageView, Appearable 

现在你可以做你需要的:

let imageView = CustomImageView()
imageView.image = myImage

并使用默认协议方法:

imageView.appear(duration: 2.0, delay: 0.0)

【讨论】:

感谢您的回答。它确实有效。但是我会从 UIView 继承什么 id 然后做同样的事情?有比将图像投射到我的自定义类更好的选择吗? @Billy 您尝试将使用您的协议扩展的 UIView 转换为 UIImageView。 UIImageView 扩展了 UIView,它已经调整了 API,不适合做这样的转换。如果您希望在 UIImageView 类上调用您的协议方法,请自定义 UIImageClass 并符合协议。 知道了。再次感谢您。

以上是关于在自定义 View 类中使用 UIImageView 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

继承ViewGroup自定义View:步骤attrs.xmlTypedArray

Spring Boot 在自定义类中使用组件? [关闭]

如何在自定义视图类中使用 soundPool? [关闭]

如何在自定义对话框类中使用 getActivity.getLayoutInflater()

如何在自定义类中调用“SetDlgItemText”?

如何在自定义View里使用ViewModel