具有IBDesignable的层变换矩阵(CATransform3D等)?

5

这个类可以为竖直的图像添加透视效果。

它的功能非常完美,但是在使用IBDesignable的Storyboard中无法实时工作,这非常令人沮丧。

在Storyboard中使用CATransform3D等技术进行实时展示是否可行?

// Twist.swift .. twist on Y, perspective from the left
import UIKit
@IBDesignable
class Twist:UIViewController
    {
    @IBInspectable var perspective:CGFloat = 0.5        // -1 to 1

    @IBOutlet var im:UIView!    // the image you want to twist on y

    override func prepareForInterfaceBuilder()
        { twist(perspective) }

    override func viewDidAppear(animated: Bool)
        {
        twist(perspective)
        super.viewWillAppear(animated)
        }

    func twist(f:CGFloat)           // -1 to 1
        {
        // hinge around left edge
        im.layer.anchorPoint = CGPointMake(0, 0.5)
        im.center = CGPointMake(0.0, self.view.bounds.size.height/2.0)

        // base transform, twist on y
        var t:CATransform3D = CATransform3DIdentity
        t.m34 = -1/500
        im.layer.transform = t
        im.layer.transform = CATransform3DRotate(t, f*CGFloat(M_PI_2), 0, 1, 0);
        }
    }
1个回答

1
我之前遇到了一个有关实时预览转换的问题。似乎它并不起作用,可能还未被实现。
有一件事情需要注意,只有 UIView 可以使用 @IBDesignable。在这里,你可以看到两个 @UIDesignable 类都无法呈现。我为示例创建了一个名为 TwistableView 的类。

Class inspector for custom view controller Class inspector for custom view


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接