ios - 覆盖 UIImageView 的图像 getter/setter 方法

标签 ios swift uiimageview overriding

我将 UIImageView 子类化,以便每次设置图像属性时都会出现动画。以下是成功的:

import UIKit

class AnimatedImageView: UIImageView {

var img: UIImage! {
    get {
        return self.image
    }
    set {
        self.image = newValue

        UIView.animateWithDuration(0.5, delay: 0.4, usingSpringWithDamping: 0.2, initialSpringVelocity: 5.0, options: .CurveEaseIn, animations: {_ in

            self.transform = CGAffineTransformMakeScale(1.1, 1.1);

            }, completion: {_ in
                self.transform = CGAffineTransformIdentity;
        })
    }
}

这并不奇怪。我将 UIImageView 子类化并添加了一个名为“img”的全新变量,它反过来修改了 UIImageView 的“图像”属性。

问题是最终用户仍然可以想象地改变 AnimatedImageView 的“图像”属性。

import UIKit

class AnimatedImageView: UIImageView {

override var image: UIImage! {
 get {
     return self.image
 }
 set {
    self.image = newValue

    UIView.animateWithDuration(0.5, delay: 0.4, usingSpringWithDamping: 0.2, initialSpringVelocity: 5.0, options: .CurveEaseIn, animations: {_ in

        self.transform = CGAffineTransformMakeScale(1.1, 1.1);

        }, completion: {_ in
            self.transform = CGAffineTransformIdentity;
    })
 }
}

果然这会导致堆栈溢出,因为当我调用 self.image = newValue 时,它会重复调用我在子类中覆盖的 setter 方法。那么,什么是覆盖 UIImageView 上“图像”属性的 getter/setter 方法的正确方法

最佳答案

只需使用 super.image 来代替,这将防止循环。

关于ios - 覆盖 UIImageView 的图像 getter/setter 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054245/

相关文章:

ios - 直接使用 Realm 对象(即作为 CollectionView 数据源)

ios - WKInterfaceButton 在 WatchKit 中的隐藏状态

uiimageview - 没有图像的 Storyboard中 UIImageView 的自动布局

ios - Objective-C ,排列和着色标签?

ios - 如何使用 Objective-C 初始化嵌套的 Node.js 模式

ios - iOS 中的 ImageView

ios - Xcode:如何使用多个 "Display Name"值,每个配置都不同?

ios - 检查 UIView 是否有属性

ios - UIImage 不会在 UIView 运行转换上显示

ios - 当我通过 UIImageView 显示大图像时应用程序崩溃