Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将镜像添加到二维长方体角点_Ios_Swift_Core Graphics_Core Animation_Swift5 - Fatal编程技术网

Ios 如何将镜像添加到二维长方体角点

Ios 如何将镜像添加到二维长方体角点,ios,swift,core-graphics,core-animation,swift5,Ios,Swift,Core Graphics,Core Animation,Swift5,你好,朋友们,我需要在右下角添加镜像。 我在这个答案的帮助下创建了视图类型 但我无法在右角和底部添加图像,一种方法是使用3个图像视图——“主”图像视图加上右侧图像视图和底部图像视图 缩放图像以适应主视图+右侧和底部的少量 设置主图像视图的.contentMode=.topLeft以剪裁右侧和底部 将右侧图像视图设置为.topRight,以剪裁左侧和底部 将底部图像视图设置为.leftBottom,以剪裁顶部和右侧 使右侧和底部视图的图像变暗(使其看起来有点“阴影”) 然后,将CGAffi

你好,朋友们,我需要在右下角添加镜像。 我在这个答案的帮助下创建了视图类型


但我无法在右角和底部添加图像,一种方法是使用3个图像视图——“主”图像视图加上右侧图像视图和底部图像视图

  • 缩放图像以适应主视图+右侧和底部的少量
  • 设置主图像视图的
    .contentMode=.topLeft
    以剪裁右侧和底部
  • 将右侧图像视图设置为
    .topRight
    ,以剪裁左侧和底部
  • 将底部图像视图设置为
    .leftBottom
    ,以剪裁顶部和右侧
  • 使右侧和底部视图的图像变暗(使其看起来有点“阴影”)
然后,将
CGAffineTransform
应用于倾斜右侧和底部视图

使用此图像(3:2比例):

这段代码(一切都是通过代码完成的-不需要IBO):

结果是:

有一个名为
vDepth
的变量,用于控制右侧的宽度和底部图像视图的高度


注意:这只是一个示例代码…希望这能帮你找到答案。

一种方法是使用3个图像视图——“主”图像视图加上右侧图像视图和底部图像视图

  • 缩放图像以适应主视图+右侧和底部的少量
  • 设置主图像视图的
    .contentMode=.topLeft
    以剪裁右侧和底部
  • 将右侧图像视图设置为
    .topRight
    ,以剪裁左侧和底部
  • 将底部图像视图设置为
    .leftBottom
    ,以剪裁顶部和右侧
  • 使右侧和底部视图的图像变暗(使其看起来有点“阴影”)
然后,将
CGAffineTransform
应用于倾斜右侧和底部视图

使用此图像(3:2比例):

这段代码(一切都是通过代码完成的-不需要IBO):

结果是:

有一个名为
vDepth
的变量,用于控制右侧的宽度和底部图像视图的高度


注意:这只是一个示例代码……希望这能帮助您上路。

当前的方法与之前的方法有所不同

之前,我画了右下角,并调整了图像的大小,这样,外观就被要求在那个位置

但在这个问题上,这种方法将不再有效。第一个原因是
draw(in rect:CGRect)
在绘图时不为图像提供镜像功能。iOS仅在
UIImageView
中绘图时提供镜像功能。因此,要进行镜像,我们需要设置3图像视图

因此,实现这一目标的方法如下

  • 将一个
    UIImageView
    放在中间
  • 将一个
    UIImageView
    放在中间右侧,另一个放在底部
  • 现在计算右镜像图像并应用右图像视图
  • 对底部也这样做
  • 上面描述的方法仍然存在一个问题。例如,我们根据y轴剪切右图像视图。剪切操作与中心一起工作。因此,左侧和右侧都沿y轴剪切。因此,我们将正平移到x轴,以便所有剪切都应用于
    UIImageView
    的右侧g> 这就是为什么要重叠右侧和主图像视图,以填补到之间的空白,如下所示

    rightImageView.leadingAnchor.constraint(equalTo: mainImageView.trailingAnchor, constant: -stripSize / 2),
    
    底部图像视图也是如此

    代码

    lass ViewController: UIViewController {
    
        let mainImageView: UIImageView = {
            let view = UIImageView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.clipsToBounds = true
            return view
        }()
        let rightImageView: UIImageView = {
            let view = UIImageView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.clipsToBounds = true
            return view
        }()
        let bottomImageView: UIImageView = {
            let view = UIImageView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.clipsToBounds = true
            return view
        }()
    
        let rightDarkView: UIView = {
            let view = UIView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.4)
            return view
        }()
    
        let bottomDarkView: UIView = {
            let view = UIView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.5)
            return view
        }()
    
    
        let mainImageSize = CGSize(width: 240, height: 240)
        let stripSize = CGFloat(20)
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
            setupView()
            setupMirroView()
        }
    
    
    
        func setupView() {
            view.addSubview(mainImageView)
            view.addSubview(rightImageView)
            view.addSubview(bottomImageView)
    
            view.addSubview(rightDarkView)
            view.addSubview(bottomDarkView)
    
            NSLayoutConstraint.activate([
                mainImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
                mainImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
                mainImageView.widthAnchor.constraint(equalToConstant: mainImageSize.width),
                mainImageView.heightAnchor.constraint(equalToConstant: mainImageSize.height),
    
                rightImageView.leadingAnchor.constraint(equalTo: mainImageView.trailingAnchor, constant: -stripSize / 2),
                rightImageView.topAnchor.constraint(equalTo: mainImageView.topAnchor),
                rightImageView.bottomAnchor.constraint(equalTo: mainImageView.bottomAnchor),
                rightImageView.widthAnchor.constraint(equalToConstant: stripSize),
    
                rightDarkView.leadingAnchor.constraint(equalTo: rightImageView.leadingAnchor),
                rightDarkView.topAnchor.constraint(equalTo: rightImageView.topAnchor),
                rightDarkView.trailingAnchor.constraint(equalTo: rightImageView.trailingAnchor),
                rightDarkView.bottomAnchor.constraint(equalTo: rightImageView.bottomAnchor),
    
                bottomImageView.topAnchor.constraint(equalTo: mainImageView.bottomAnchor, constant: -stripSize / 2),
                bottomImageView.leadingAnchor.constraint(equalTo: mainImageView.leadingAnchor),
                bottomImageView.trailingAnchor.constraint(equalTo: mainImageView.trailingAnchor),
                bottomImageView.heightAnchor.constraint(equalToConstant: stripSize),
    
                bottomDarkView.leadingAnchor.constraint(equalTo: bottomImageView.leadingAnchor),
                bottomDarkView.topAnchor.constraint(equalTo: bottomImageView.topAnchor),
                bottomDarkView.trailingAnchor.constraint(equalTo: bottomImageView.trailingAnchor),
                bottomDarkView.bottomAnchor.constraint(equalTo: bottomImageView.bottomAnchor)
    
                ])
        }
    
        func setupMirroView() {
            let image = UIImage(named: "image")
            mainImageView.image = image
    
            // prepare the image for the right image view
            let rightImage = image?.cropped(to: CGSize(width: stripSize, height: mainImageSize.height),
                                            drawInto: CGRect(x: stripSize - mainImageSize.width, y: 0, width: mainImageSize.width, height: mainImageSize.height))
            let rightImageMirrored = UIImage(cgImage: rightImage!.cgImage!, scale: 1.0, orientation: .upMirrored)
            rightImageView.image = rightImageMirrored
    
            var rightTransform = CGAffineTransform.identity
            rightTransform = rightTransform.translatedBy(x: stripSize / 2, y: 0)
            rightTransform = rightTransform.concatenating(CGAffineTransform(a: 1.0, b: 1.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0))
            rightImageView.transform = rightTransform
            rightDarkView.transform = rightTransform
    
    
            // prepare the image for the left image view
            let downImage = image?.cropped(to: CGSize(width: mainImageSize.width, height: stripSize),
                                           drawInto: CGRect(x: 0, y: stripSize - mainImageSize.height, width: mainImageSize.width, height: mainImageSize.height))
            let downImageMirroed = UIImage(cgImage: downImage!.cgImage!, scale: 1.0, orientation: .downMirrored)
            bottomImageView.image = downImageMirroed
    
            var downTransform = CGAffineTransform.identity
            downTransform = downTransform.translatedBy(x: 0, y: stripSize / 2)
            downTransform = downTransform.concatenating(__CGAffineTransformMake(1.0, 0.0, 1.0, 1.0, 0.0, 0.0))
            bottomImageView.transform = downTransform
            bottomDarkView.transform = downTransform
    
        }
    
    }
    
    extension UIImage {
        func cropped(to size: CGSize, drawInto: CGRect) -> UIImage {
            UIGraphicsBeginImageContext(size)
            self.draw(in: drawInto)
            let newImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return newImage!
        }
    }
    
    输出


    当前的方法与当前的方法有些不同

    之前,我画了右下角,并调整了图像的大小,这样,外观就被要求在那个位置

    但在这个问题上,这种方法将不再有效。第一个原因是
    draw(in rect:CGRect)
    在绘图时不为图像提供镜像功能。iOS仅在
    UIImageView
    中绘图时提供镜像功能。因此,要进行镜像,我们需要设置3图像视图

    因此,实现这一目标的方法如下

  • 将一个
    UIImageView
    放在中间
  • 将一个
    UIImageView
    放在中间右侧,另一个放在底部
  • 现在计算右镜像图像并应用右图像视图
  • 对底部也这样做
  • 上面描述的方法仍然存在一个问题。例如,我们根据y轴剪切右图像视图。剪切操作与中心一起工作。因此,左侧和右侧都沿y轴剪切。因此,我们将正平移到x轴,以便所有剪切都应用于
    UIImageView
    的右侧g> 这就是为什么要重叠右侧和主图像视图,以填补到之间的空白,如下所示

    rightImageView.leadingAnchor.constraint(equalTo: mainImageView.trailingAnchor, constant: -stripSize / 2),
    
    底部图像视图也是如此

    代码

    lass ViewController: UIViewController {
    
        let mainImageView: UIImageView = {
            let view = UIImageView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.clipsToBounds = true
            return view
        }()
        let rightImageView: UIImageView = {
            let view = UIImageView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.clipsToBounds = true
            return view
        }()
        let bottomImageView: UIImageView = {
            let view = UIImageView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.clipsToBounds = true
            return view
        }()
    
        let rightDarkView: UIView = {
            let view = UIView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.4)
            return view
        }()
    
        let bottomDarkView: UIView = {
            let view = UIView()
            view.translatesAutoresizingMaskIntoConstraints = false
            view.backgroundColor = UIColor.init(red: 0, green: 0, blue: 0, alpha: 0.5)
            return view
        }()
    
    
        let mainImageSize = CGSize(width: 240, height: 240)
        let stripSize = CGFloat(20)
    
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
    
            setupView()
            setupMirroView()
        }
    
    
    
        func setupView() {
            view.addSubview(mainImageView)
            view.addSubview(rightImageView)
            view.addSubview(bottomImageView)
    
            view.addSubview(rightDarkView)
            view.addSubview(bottomDarkView)
    
            NSLayoutConstraint.activate([
                mainImageView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
                mainImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
                mainImageView.widthAnchor.constraint(equalToConstant: mainImageSize.width),
                mainImageView.heightAnchor.constraint(equalToConstant: mainImageSize.height),
    
                rightImageView.leadingAnchor.constraint(equalTo: mainImageView.trailingAnchor, constant: -stripSize / 2),
                rightImageView.topAnchor.constraint(equalTo: mainImageView.topAnchor),
                rightImageView.bottomAnchor.constraint(equalTo: mainImageView.bottomAnchor),
                rightImageView.widthAnchor.constraint(equalToConstant: stripSize),
    
                rightDarkView.leadingAnchor.constraint(equalTo: rightImageView.leadingAnchor),
                rightDarkView.topAnchor.constraint(equalTo: rightImageView.topAnchor),
                rightDarkView.trailingAnchor.constraint(equalTo: rightImageView.trailingAnchor),
                rightDarkView.bottomAnchor.constraint(equalTo: rightImageView.bottomAnchor),
    
                bottomImageView.topAnchor.constraint(equalTo: mainImageView.bottomAnchor, constant: -stripSize / 2),
                bottomImageView.leadingAnchor.constraint(equalTo: mainImageView.leadingAnchor),
                bottomImageView.trailingAnchor.constraint(equalTo: mainImageView.trailingAnchor),
                bottomImageView.heightAnchor.constraint(equalToConstant: stripSize),
    
                bottomDarkView.leadingAnchor.constraint(equalTo: bottomImageView.leadingAnchor),
                bottomDarkView.topAnchor.constraint(equalTo: bottomImageView.topAnchor),
                bottomDarkView.trailingAnchor.constraint(equalTo: bottomImageView.trailingAnchor),
                bottomDarkView.bottomAnchor.constraint(equalTo: bottomImageView.bottomAnchor)
    
                ])
        }
    
        func setupMirroView() {
            let image = UIImage(named: "image")
            mainImageView.image = image
    
            // prepare the image for the right image view
            let rightImage = image?.cropped(to: CGSize(width: stripSize, height: mainImageSize.height),
                                            drawInto: CGRect(x: stripSize - mainImageSize.width, y: 0, width: mainImageSize.width, height: mainImageSize.height))
            let rightImageMirrored = UIImage(cgImage: rightImage!.cgImage!, scale: 1.0, orientation: .upMirrored)
            rightImageView.image = rightImageMirrored
    
            var rightTransform = CGAffineTransform.identity
            rightTransform = rightTransform.translatedBy(x: stripSize / 2, y: 0)
            rightTransform = rightTransform.concatenating(CGAffineTransform(a: 1.0, b: 1.0, c: 0.0, d: 1.0, tx: 0.0, ty: 0.0))
            rightImageView.transform = rightTransform
            rightDarkView.transform = rightTransform
    
    
            // prepare the image for the left image view
            let downImage = image?.cropped(to: CGSize(width: mainImageSize.width, height: stripSize),
                                           drawInto: CGRect(x: 0, y: stripSize - mainImageSize.height, width: mainImageSize.width, height: mainImageSize.height))
            let downImageMirroed = UIImage(cgImage: downImage!.cgImage!, scale: 1.0, orientation: .downMirrored)
            bottomImageView.image = downImageMirroed
    
            var downTransform = CGAffineTransform.identity
            downTransform = downTransform.translatedBy(x: 0, y: stripSize / 2)
            downTransform = downTransform.concatenating(__CGAffineTransformMake(1.0, 0.0, 1.0, 1.0, 0.0, 0.0))
            bottomImageView.transform = downTransform
            bottomDarkView.transform = downTransform
    
        }
    
    }
    
    extension UIImage {
        func cropped(to size: CGSize, drawInto: CGRect) -> UIImage {
            UIGraphicsBeginImageContext(size)
            self.draw(in: drawInto)
            let newImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return newImage!
        }
    }
    
    输出


    谢谢你的回答,donMag。但它的右角需要镜像。谢谢你的回答,donMag。但它的右角需要镜像。