You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何去除PencilKit Marker工具的默认颜色透明度

PencilKit 马克笔默认透明度移除方案

系统原生PKMarker工具的半透明效果是PencilKit框架内置的硬编码渲染特性,没有公开API可以直接一键关闭该默认效果,所有可行方案均通过绕开原生marker渲染逻辑、事后修正笔画属性实现,直接给原生marker工具设置color.withAlphaComponent(1.0)是无效的,系统会在渲染marker类型笔画时自动叠加固定透明度。

方案1:自定义无透明度仿马克笔工具(稳定性最高,推荐)

  • 弃用系统内置的.marker类型笔触,改用其他可控的笔刷类型模拟马克笔效果,从根源避开系统的透明渲染逻辑:
    // 选用.pen笔刷类型,调整宽度、触感参数模拟马克笔粗头效果,颜色alpha强制设为1.0
    let opaqueMarkerTool = PKInkingTool(
        .pen,
        color: UIColor.black.withAlphaComponent(1.0),
        width: 28
    )
    
  • 如果需要还原马克笔的平头、叠加无变深的特性,可以通过PKStroke自定义路径渲染逻辑,手动控制所有笔触的颜色alpha值恒为1,完全自主控制渲染效果。

方案2:遍历笔画修正透明度(iOS14+可用,改动量小)

  • 利用PencilKit公开的笔画访问接口,在每次绘制结束后遍历画布所有笔画,将马克笔类型的笔画颜色强制改为不透明,再重新赋值给画布:
    func removeMarkerAlpha(for drawing: PKDrawing) -> PKDrawing {
        var processedStrokes: [PKStroke] = []
        for stroke in drawing.strokes {
            var newStroke = stroke
            if newStroke.ink.type == .marker {
                let rawColor = newStroke.ink.color
                // 强制将马克笔颜色透明度设为1.0
                newStroke.ink = PKInk(.marker, color: rawColor.withAlphaComponent(1.0))
            }
            processedStrokes.append(newStroke)
        }
        return PKDrawing(strokes: processedStrokes)
    }
    
    // 调用时机:监听canvasViewDrawingDidChange(_ canvasView: PKCanvasView)回调
    func canvasViewDrawingDidChange(_ canvasView: PKCanvasView) {
        // 加防抖避免绘制过程中频繁赋值卡顿
        NSObject.cancelPreviousPerformRequests(withTarget: self)
        perform(#selector(updateOpaqueMarker), with: nil, afterDelay: 0.3)
    }
    
    @objc private func updateOpaqueMarker() {
        let processedDrawing = removeMarkerAlpha(for: canvasView.drawing)
        canvasView.drawing = processedDrawing
    }
    
  • 注意:该方案需要加防抖逻辑,避免绘制过程中频繁重绘导致卡顿。

方案3:自定义工具选择器

  • 直接在PKToolPicker中移除原生马克笔选项,替换为你自定义的无透明度仿马克笔工具,从选择入口避免用户触发原生带透明度的马克笔渲染逻辑,适合不需要完全对齐原生马克笔交互的场景。

内容的提问来源于stack exchange,提问作者Evan C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 12:31:01