【问题标题】:How to call a extension file for a border of pitcure in swift如何在swift中调用图片边框的扩展文件
【发布时间】:2016-12-05 22:34:40
【问题描述】:

我下面的代码应该为拍摄的照片提供可自定义的边框。我最初有一个边框,但它不能自定义。我在网上看到了这个关于扩展文件(CALAYER)中可定制边框的代码。对我来说,显然我必须在我的类文件(x1ViewController)中调用 CALYAER 函数才能显示边框,我只是不知道该怎么做。

import UIKit

extension CALayer {
func addBorder(edge: UIRectEdge, color: UIColor, thickness: CGFloat) {

    let border = CALayer();

    switch edge {
    case UIRectEdge.top:
        border.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: thickness)
        break
    case UIRectEdge.bottom:
        border.frame = CGRect(x:0, y:self.frame.height - thickness, width:self.frame.width, height:thickness)
        break
    case UIRectEdge.left:
        border.frame = CGRect(x:0, y:0, width: thickness, height: self.frame.height)
        break
    case UIRectEdge.right:
        border.frame = CGRect(x:self.frame.width - thickness, y: 0, width: thickness, height:self.frame.height)
        break
    default:
        break
    }

    border.backgroundColor = color.cgColor;

    self.addSublayer(border)
}


}



class x1ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UITextFieldDelegate {



@IBOutlet weak var imageDisplay: UIImageView!
     var screenView: UIImageView!







@IBAction func camera(_ sender: AnyObject) {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera){
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self







       // imageDisplay.layer.borderColor = UIColor(red: 0, green: 1.0, blue: 0, alpha: 1).cgColor
        //imageDisplay.layer.cornerRadius = 1
       // imageDisplay.contentMode = .scaleAspectFit
       // imageDisplay.layer.borderWidth = 1


        imagePicker.sourceType = UIImagePickerControllerSourceType.camera;
        imagePicker.allowsEditing = false
        self.present(imagePicker, animated: true, completion: nil)}}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject: AnyObject]!){
    imageDisplay.image = image
    self.dismiss(animated: true, completion: nil);
    screenView = UIImageView()

    screenView.frame = CGRect(x:0, y: 0, width: self.view.frame.width, height: self.view.frame.height)




    let text = "#HAPPY"
    let label = UILabel(frame: CGRect(x: 125, y: 700, width: self.view.frame.width, height: 300))
    label.font = UIFont(name: label.font.fontName, size: 122)

    label.textColor = UIColor.blue
    label.alpha = 1.0
    label.text = text


    self.view.addSubview(screenView)
    self.view.addSubview(label)


    UIGraphicsBeginImageContext(self.imageDisplay.frame.size)
    self.view.drawHierarchy(in: self.view.frame, afterScreenUpdates: true)

}
@IBAction func save(_ sender: AnyObject) {

    let alert = UIAlertController(title: "Image Saved", message: "Image is in photo gallery", preferredStyle: .alert)
    let okay = UIAlertAction(title: "OK", style: .default, handler: nil)
    alert.addAction(okay)
    present(alert, animated: true, completion: nil)



    let photo = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(photo!, nil, nil, nil)

}


}

【问题讨论】:

    标签: swift uiimageview swift3 border layer


    【解决方案1】:

    扩展将该方法添加到CALayer。您可以使用其layer 属性访问视图的层。

    myView.layer.addBorder(/* your arguments*/)

    【讨论】:

    • 所以我会把 myView.layer.addBorder(imageDisplay)?这就是我需要附加边框的uiimageview。谢谢。
    • 不,如果 imageDisplay 是您要为其添加边框的视图,那么您将执行类似imageDisplay.layer.addBorder([.Top], UIColor.redColor(), 1.0) 的操作,看起来您使用的是 2.x Swift 语法,所以看起来有点与 3.0 不同
    • 这很完美。唯一的问题是它切断了图像。如何使图片不被裁剪,只根据自定义边框厚度调整大小?谢谢@Dima
    • 你可以“分层”视图然后(原谅文字游戏)。代替 imageView.layer.addborder,将 imageView 作为子视图放入更大的 UIView。然后使用 newView.layer.addBorder
    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多