ios - 用渐变色 SWIFT 填充未定义的表格

标签 ios swift core-graphics gradient

我是编程新手,我不知道如何用渐变颜色填充未定义的几何形状... 我设法使用了这样一种简单的颜色:

 func fillRegion(pixelX: Int, pixelY: Int, withColor color: UIColor) {

    var red: CGFloat = 0, green: CGFloat = 0, blue: CGFloat = 0, alpha: CGFloat = 0
    color.getRed(&red, green: &green, blue: &blue, alpha: &alpha)

    var newColor = (UInt32)(alpha*255)<<24 | (UInt32)(red*255)<<16 | (UInt32)(green*255)<<8 | (UInt32)(blue*255)<<0

    let pixelColor = regionsData.advanced(by: (pixelY * imageHeight) + pixelX).pointee

    if pixelColor == blackColor { return }

    var pointerRegionsData: UnsafeMutablePointer<UInt32> = regionsData
    var pointerImageData: UnsafeMutablePointer<UInt32> = imageData

    var pixelsChanged = false

    for i in 0...(imageHeight * imageHeight - 1) {
        if pointerRegionsData.pointee == pixelColor {
            pointerImageData = imageData.advanced(by: i)
            if pointerImageData.pointee != newColor {
//                    newColor = newColor + 1
                pointerImageData.pointee = newColor
                pixelsChanged = true
            }
        }
        pointerRegionsData = pointerRegionsData.successor()
    }

    if pixelsChanged {
        self.image = UIImage(cgImage: imageContext.makeImage()!)
        DispatchQueue.main.async {
            CATransaction.setDisableActions(true)
            self.layer.contents = self.image.cgImage
            self.onImageDraw?(self.image)
        }
        self.playTapSound()
    }
}

逐个像素地填充颜色(忽略黑色)任何想法如何使用渐变颜色来做到这一点?谢谢!

最佳答案

您可以制作一个渐变图层并将图像或形状图层用作其蒙版。这里是 Playground 。

    import PlaygroundSupport
    import UIKit

    class V: UIView {
        private lazy var gradientLayer: CAGradientLayer = {
            let gradientLayer = CAGradientLayer()
            gradientLayer.colors =  [UIColor.red.cgColor,
                                     UIColor.purple.cgColor,
                                     UIColor.blue.cgColor,
                                     UIColor.white.cgColor]
            gradientLayer.locations = [0, 0.3, 0.9, 1]
            gradientLayer.startPoint = CGPoint(x: 0, y: 0)
            gradientLayer.endPoint = CGPoint(x: 0, y: 1)
            gradientLayer.mask = self.strokeLayer
            self.layer.addSublayer(gradientLayer)
            return gradientLayer
        }()

        private lazy var strokeLayer: CAShapeLayer = {
            let strokeLayer = CAShapeLayer()
            strokeLayer.path = UIBezierPath(ovalIn: CGRect(x:0, y: 0, width: 100, height: 100)).cgPath
            return strokeLayer
        }()

        override func layoutSubviews() {
            super.layoutSubviews()
            strokeLayer.path = UIBezierPath(ovalIn: bounds).cgPath
            gradientLayer.frame = bounds

            layer.addSublayer(gradientLayer)
        }
    }
    let v = V(frame: CGRect(x: 0, y: 0, width: 200, height: 200))
    PlaygroundPage.current.liveView = v

关于ios - 用渐变色 SWIFT 填充未定义的表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41832489/

相关文章:

ios - 将自定义对象保存到 NSUserDefaults

objective-c - 如何在 Swift/XCode 中的 Controller 之间共享(MVC)模型?

ios - clipToBounds 问题 : UIView Vs CALayer

javascript - MobileSafari 因内存消耗过多而崩溃

ios - 在 MVC 中绘制模型 View 或 Controller 的 UIBezierPath 部分

ios - Fabric/Crashlytics-没有适用于iOS的数据和崩溃报告

ios - 使用 Swift 请求用户在 App Store 上购买应用程序的日期

swift - Realm Swift - 按 ID 查找

iphone - Core Animation (CABasicAnimation) 的不可预测行为

iphone - 将颜色应用于灰度图像,保留 alpha 值 (iOS/Quartz)