小编pwi*_*man的帖子

CGImage蒙版在宽色域显示器上不起作用

我有一个UIView子类,用于渲染应用了蒙版的图像.它适用于所有设备(仅适用于iPad),除了具有宽色域显示器(最新的iPad专业版)的设备,其中蒙版呈现完全透明(它看起来像用户看起来不在那里).相关的init/drawRect代码如下所示:

init(image: UIImage) {
    scratchable = image.cgImage!
    imageWidth = scratchable.width
    imageHeight = scratchable.height

    let colorspace = CGColorSpaceCreateDeviceGray()

    let pixels = CFDataCreateMutable(nil, imageWidth * imageHeight)!

    alphaPixels = CGContext(
        data: CFDataGetMutableBytePtr(pixels),
        width: imageWidth,
        height: imageHeight,
        bitsPerComponent: 8,
        bytesPerRow: imageWidth,
        space: colorspace,
        bitmapInfo: CGImageAlphaInfo.none.rawValue
    )!
    provider = CGDataProvider(data: pixels)!

    alphaPixels.setFillColor(UIColor.black.cgColor)

    let mask = CGImage(
        maskWidth: imageWidth,
        height: imageHeight,
        bitsPerComponent: 8,
        bitsPerPixel: 8,
        bytesPerRow: imageWidth,
        provider: provider,
        decode: nil,
        shouldInterpolate: false
    )!

    scratched = scratchable.masking(mask)!

    super.init(frame: CGRect(x: 0, y: 0, width: imageWidth/2, height: imageHeight/2)) …
Run Code Online (Sandbox Code Playgroud)

core-graphics ipad ios

7
推荐指数
1
解决办法
153
查看次数

使用组合的自定义更改运算符

我正在创建一个组合发布者/订阅者/订阅,其行为如下:

struct Change<Value> {
  let new: Value
  let previous: Value?
}

let pub = PassthroughSubject<Int, Never>()

let cancellable = pub
  .change()
  .sink { (change: Change<Int>) -> Void in
    print(change)
  }

pub.send(1) // prints Change(new: 1, previous: nil)
pub.send(2) // prints Change(new: 2, previous: 1)
pub.send(3) // prints Change(new: 3, previous: 2)
Run Code Online (Sandbox Code Playgroud)

难以找到正确的实施方案。我已经制作了自己的发布者/订阅来包装外部 API 调用和排序,但是当需要保留某些状态时无法想出正确的组合,就像本示例中的先前值一样(我认为这意味着您需要自定义订阅者?)

如果由于某种原因该语法不可行,则具有相同语义的替代语法也是可以接受的.change()

swift combine

2
推荐指数
1
解决办法
825
查看次数

标签 统计

combine ×1

core-graphics ×1

ios ×1

ipad ×1

swift ×1