Swift - Problems with corner radius and drop shadow

前端 未结 14 1416
失恋的感觉
失恋的感觉 2020-11-28 18:35

I\'m trying to create a button with rounded corners and a drop shadow. No matter how I switch up, the button will not display correctly. I\

14条回答
  •  無奈伤痛
    2020-11-28 18:42

    An alternative way to get more usable and consistent button.

    Swift 2:

    func getImageWithColor(color: UIColor, size: CGSize, cornerRadius:CGFloat) -> UIImage {
        let rect = CGRectMake(0, 0, size.width, size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 1)
        UIBezierPath(
            roundedRect: rect,
            cornerRadius: cornerRadius
            ).addClip()
        color.setFill()
        UIRectFill(rect)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
    
    let button = UIButton(type: .Custom)
    button.frame = CGRectMake(20, 20, 200, 50)
    button.setTitle("My Button", forState: UIControlState.Normal)
    button.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal)
    self.addSubview(button)
    
    let image = getImageWithColor(UIColor.whiteColor(), size: button.frame.size, cornerRadius: 5)
    button.setBackgroundImage(image, forState: UIControlState.Normal)
    
    button.layer.shadowRadius = 5
    button.layer.shadowColor = UIColor.blackColor().CGColor
    button.layer.shadowOpacity = 0.5
    button.layer.shadowOffset = CGSizeMake(0, 1)
    button.layer.masksToBounds = false
    

    Swift 3:

    func getImageWithColor(_ color: UIColor, size: CGSize, cornerRadius:CGFloat) -> UIImage? {
        let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height)
        UIGraphicsBeginImageContextWithOptions(size, false, 0)
        color.setFill()
        UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius).addClip()
        color.setFill()
        UIRectFill(rect)
        let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
    
    let button = UIButton(type: .custom)
    button.frame = CGRect(x:20, y:20, width:200, height:50)
    button.setTitle("My Button", for: .normal)
    button.setTitleColor(UIColor.black, for: .normal)
    self.addSubview(button)
    
    if let image = getImageWithColor(UIColor.white, size: button.frame.size, cornerRadius: 5) {
        button.setBackgroundImage(image, for: .normal)
    }
    
    button.layer.shadowRadius = 5
    button.layer.shadowColor = UIColor.black.cgColor
    button.layer.shadowOpacity = 0.5
    button.layer.shadowOffset = CGSize(width:0, height:1)
    button.layer.masksToBounds = false
    

提交回复
热议问题