在iOS菜单中滑动



我正在尝试在菜单中创建一个从左进来的幻灯片,但我做了一些事情,而它则落入右边。我以编程方式完成了这种未使用的故事板,因为大多数时候约束都搞砸了。

例如,屏幕截图(可能我已经完成了):幻灯片菜单 - 出错了

import UIKit
class SideInMenu: NSObject {
    let blackView = UIView()
    let collectionView: UICollectionView = {
        let layout = UICollectionViewFlowLayout()
        let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
        return cv
    }()
    @objc func showSlideMenu() {
        //Show slide in menu Here
        if let window = UIApplication.shared.keyWindow {
            blackView.backgroundColor = UIColor(white: 0, alpha: 0.5)
            blackView.addGestureRecognizer(UITapGestureRecognizer(target:
                self, action: #selector(handleDismiss)))
            window.addSubview(blackView)
            window.addSubview(collectionView)
            let width: CGFloat = 194
            let x = window.frame.width - width
            collectionView.frame = CGRectMake(x, 0, width, window.frame.height)
            //collectionView.frame = CGRectMake(x, 0, width, window.frame.height)
            blackView.frame = window.frame
            blackView.alpha = 0
            UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping:
                1, initialSpringVelocity: 1, options: .curveEaseOut,
                animations: {
                self.blackView.alpha = 1
                self.collectionView.frame = self.CGRectMake(width, 0, self.collectionView.frame.width, self.collectionView.frame.height)
            }, completion: nil)
        }
    }
    @objc func handleDismiss() {
        UIView.animate(withDuration: 0.5) {
            self.blackView.alpha = 0
            if let window = UIApplication.shared.keyWindow {
                self.collectionView.frame = self.CGRectMake(window.frame.width, 0, self.collectionView.frame.width, self.collectionView.frame.height)
            }
        }
    }
    override init() {
        super.init()
    }
    func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {return CGRect(x: x, y: y, width: width, height: height)
    }
}

始终记住,x和y的0,0始终是屏幕的左上角,如果宽度和高度为20、20遍布20px。您必须在内部进行的第一件事viewDidLoad是设置CollectionViews初始帧,该框架是这样的。不要忘记负宽度

self.collectionView.frame = self.CGRectMake(-width, 0, self.collectionView.frame.width, self.collectionView.frame.height)

像这样从左边对其进行动画:

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping:
            1, initialSpringVelocity: 1, options: .curveEaseOut,
            animations: {
            self.blackView.alpha = 1
            self.collectionView.frame = self.CGRectMake(0, 0, self.collectionView.frame.width, self.collectionView.frame.height)
        }, completion: nil)

解雇:

        UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping:
            1, initialSpringVelocity: 1, options: .curveEaseOut,
            animations: {
            self.blackView.alpha = 1
            self.collectionView.frame = self.CGRectMake(-width, 0, self.collectionView.frame.width, self.collectionView.frame.height)
        }, completion: nil)

相关内容

  • 没有找到相关文章

最新更新