gpt4 book ai didi

ios - 如何反转 UIView 或层下所有 View 的颜色?

转载 作者:行者123 更新时间:2023-12-05 07:13:34 51 4
gpt4 key购买 nike

我正在尝试在图层/ View 下将颜色反转为负片。

有没有办法实现一个影响其下屏幕中所有内容的层,而不仅仅是 subview 。或者有没有办法在整个屏幕上的特定区域反转颜色?

例如,我的目标是在所选行(白色行)的顶部添加一个 View /层,并在新添加的 View /层下每隔一个 View 反转颜色。这意味着现在行文本应该是黑色的,而不是白色的,而且红色 View 应该是倒置的。

感谢任何帮助,提前致谢!

enter image description here

最佳答案

这是一项艰巨的任务,因为捕获指定区域中的所有内容可能需要裁剪一些 View 。这不能以编程方式完成(目前)并且需要视觉操作。

基本思想是获取屏幕特定部分的图像,执行您的更改,然后将图像作为非交互式叠加层应用到完全相同的位置。

这说起来容易做起来难,即使使用像 SwiftUI 的 ImageRenderer 这样的新工具也是如此。在 iOS 16 中引入,实时更新快照的性能和可靠性远未达到生产就绪状态。

我的首选解决方案(如果您可以使用私有(private) API)是从 Objective-C 引入 CABackdropLayer 类,并将您的影响应用到层。 Apple 很有可能使用相同的 API 来实现实时模糊效果。

这将使事情在 SwiftUI 中运行:


//
// APIName: Backdrop
// Developed by _
//

// MARK: - Imports

import SwiftUI

//
//

// MARK: - Classes

/// Creates a `UIView` from a `CABackdropLayer`.
///
/// - Warning: Uses a private API.
///
@available ( iOS 16.0, * )
final public class UIBackdrop: UIView {

/// The selector to call from Objective-C.
///
private static let selector: String = { [ "Layer", "Backdrop", "CA" ] .reversed ( ) .joined ( ) } ( )

/// Gets the `CABackdropLayer` class.
///
override public class var layerClass: AnyClass { NSClassFromString ( self. selector ) ?? CALayer.self }

}

//
//

// MARK: - Structures

/// A `CABackdropLayer` wrapper that captures the content behind it.
///
/// - Warning: Uses a private API.
///
@available ( iOS 16.0, * )
public struct Backdrop: UIViewRepresentable {

/// Creates the UI view.
///
public func makeUIView ( context: Context ) -> UIBackdrop { UIBackdrop ( ) }

/// Updates the UI view.
///
public func updateUIView ( _ uiView: UIBackdrop, context: Context ) { }

}

//
//

我在应用审核方面没有遇到任何问题,因此您在这方面应该没问题,但使用风险自负。

关于ios - 如何反转 UIView 或层下所有 View 的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60114031/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com