精灵套件中的裁剪/蒙版圆形图像节点会产生锯齿状边缘

2023-12-08

是否可以为没有锯齿状边缘的图像节点提供圆形蒙版/裁剪?

按照苹果公司的这个例子(https://developer.apple.com/reference/spritekit/skcropnode),结果并不理想。您可以点击链接查看。

    let shapeNode = SKShapeNode()
    shapeNode.physicsBody = SKPhysicsBody(circleOfRadius: radius)
    shapeNode.physicsBody?.allowsRotation = false
    shapeNode.strokeColor = SKColor.clearColor()

    // Add a crop node to mask the profile image
    // profile images (start off with place holder)
    let scale = 1.0
    let profileImageNode = SKSpriteNode(imageNamed: "PlaceholderUser")
    profileImageNode.setScale(CGFloat(scale))

    let circlePath = CGPathCreateWithEllipseInRect(CGRectMake(-radius, -radius, radius*2, radius*2), nil)

    let circleMaskNode = SKShapeNode()
    circleMaskNode.path = circlePath
    circleMaskNode.zPosition = 12
    circleMaskNode.name = "connection_node"
    circleMaskNode.fillColor = SKColor.whiteColor()
    circleMaskNode.strokeColor = SKColor.clearColor()

    let zoom = SKAction.fadeInWithDuration(0.25)
    circleMaskNode.runAction(zoom)

    let cropNode = SKCropNode()
    cropNode.maskNode = circleMaskNode
    cropNode.addChild(profileImageNode)
    cropNode.position = shapeNode.position

    shapeNode.addChild(cropNode)
    self.addChild(shapeNode)

更新:

好的,这是我想出的一个解决方案。不是超级理想,但效果很好。本质上,我有一个尺寸/比例,并按照 SKSpriteNode 上的方式精确地剪切图像,因此我不必使用 SKCropNode 或 SKShapeNode 的某些变体。

  1. 我使用 Leo Dabus 的这些 UIImage 扩展来根据需要调整图像的大小/形状。将 UIImage 剪切成圆形 Swift(iOS)

    var circle: UIImage? {
         let square = CGSize(width: min(size.width, size.height), height: min(size.width, size.height))
         let imageView = UIImageView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: square))
         imageView.contentMode = .ScaleAspectFill
         imageView.image = self
         imageView.layer.cornerRadius = square.width/2
         imageView.layer.masksToBounds = true
         UIGraphicsBeginImageContextWithOptions(imageView.bounds.size, false, scale)
         guard let context = UIGraphicsGetCurrentContext() else { return nil }
         imageView.layer.renderInContext(context)
         let result = UIGraphicsGetImageFromCurrentImageContext()
         UIGraphicsEndImageContext()
         return result
    }
    
    func resizedImageWithinRect(rectSize: CGSize) -> UIImage {
         let widthFactor = size.width / rectSize.width
         let heightFactor = size.height / rectSize.height
    
         var resizeFactor = widthFactor
         if size.height > size.width {
         resizeFactor = heightFactor
         }
    
         let newSize = CGSizeMake(size.width/resizeFactor, size.height/resizeFactor)
         let resized = resizedImage(newSize)
         return resized
    }
    
  2. 最终代码如下所示:

    //create/shape image
    let image = UIImage(named: "TestImage")
    let scaledImage = image?.resizedImageWithinRect(CGSize(width: 100, height: 100))
    let circleImage = scaledImage?.circle
    
    //create sprite
    let sprite = SKSpriteNode(texture: SKTexture(image: circleImage!))
    sprite.position = CGPoint(x: view.frame.width/2, y: view.frame.height/2)
    
    //set texture/image
    sprite.texture = SKTexture(image: circleImage!)
    sprite.physicsBody = SKPhysicsBody(texture: SKTexture(image: circleImage!), size: CGSizeMake(100, 100))
    if let physics = sprite.physicsBody {
        //add the physic properties
    }
    
    //scale node
    sprite.setScale(1.0)
    addChild(sprite)
    

因此,如果您有完美缩放的资源/图像,那么您可能不需要完成所有这些工作,但我从后端获取可能有任何尺寸的图像。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

精灵套件中的裁剪/蒙版圆形图像节点会产生锯齿状边缘 的相关文章

  • 如何单击“取消”按钮退出搜索?

    我有一个带有取消按钮的搜索栏 但是当我单击 取消 按钮时 它不会关闭搜索栏 如何使单击 取消 时将搜索栏返回到第一个状态 如果您有任何疑问 请询问我 您需要实现 UISearchBarDelegate class ViewControlle
  • 比较两个图像并找出差异百分比

    我一直在尝试通过图像制作动物识别应用程序 我的方法是将所选图像与图像数组中的其他图像进行比较 并列出相似度超过 90 的所有比较 还有其他方法可以比较两个相似但不相似的图像吗 任何建议 将不胜感激 这些计算还必须运行多次迭代 因此非常需要一
  • 使用 swift 自动滚动 UITextView (IOS 应用程序)

    我似乎无法找到自动滚动的正确解决方案UITextView using Swift 对于我的应用程序 我从 BT 接收持续数据 并且我正在更新它UITextView 然而 当UITextView将到达最新更新的行 我将不得不手动滚动 我想要实
  • Swift 类型推断和类型检查问题

    我不是在寻找如何正确执行此操作的答案 而是在寻找为什么会发生这种情况的答案 这是代码 func isInt param AnyObject if let value param as Int print value else print N
  • 在 Swift 中寻找“退出”等价物[重复]

    这个问题在这里已经有答案了 我尝试把exit 0 在一个小型测试 命令行 程序中 Xcode 给出了一条错误消息 指出Use of unresolved identifier exit 这让我很困惑 因为这个问题 https stackov
  • 返回 Self 的协议函数

    我有一个返回对象副本的协议 P protocol P func copy gt Self 和一个实现 P 的 C 类 class C P func copy gt Self return C 但是 我是否将返回值设置为Self我收到以下错误
  • Xcode 12 根本没有调用动态链接 Firebase 函数?

    因此 我有一个正在运行的动态链接 当我单击它时它会打开应用程序 但不会发生动态链接的处理 这是因为下面看到的应用程序功能从未输入过 我不知道为什么 func handleIncomingDynamicLink dynamicLink Dyn
  • 调整 SKShapeNode 的大小

    如何调整 SKShapeNode 的大小 到目前为止我尝试过的 调整框架大小 box frame width 10 给出错误Cannot assign to the result of this expression SKAction le
  • UITextField 文本更改事件

    如何检测文本字段中的任何文本更改 委托方法shouldChangeCharactersInRange适用于某些东西 但它并不能完全满足我的需求 因为在它返回 YES 之前 textField 文本不可用于其他观察者方法 例如在我的代码中ca
  • CLLocation Manager如何在一定距离后更新

    我正在使用 CLLocationManager didupdatelocations 如下所示 func locationManager manager CLLocationManager didUpdateLocations locati
  • 如何将导航栏大标题转换为多行,居中对齐

    我正在尝试设计具有多行居中大标题文本的视图控制器 就像苹果的 Ask Siri Settings gt General gt Keyboards gt About Ask Siri Dictation and Privacy 我可以使用以下
  • 如何在 SwiftUI 中将阴影应用于内部视图?

    我在周围添加了阴影VStack其中包含我的两个文本字段和一个提交按钮 然而 阴影也被应用到了文本框内的两个文本字段 VStack 我在这里缺少什么导致这种情况发生吗 我尝试添加shadow radius 0 在文本字段上 但它不会改变任何内
  • 检查定位服务是否开启

    我一直在对 CoreLocation 进行一些研究 最近 我遇到了一个在其他地方 但在 Objective C 和 iOS 8 中 已经讨论过的问题 我觉得问这个问题有点傻 但是如何在 iOS 9 上使用 swift 检查是否启用了位置服务
  • 我如何从子视图导航到 mainviewcontroller

    我刚刚开始使用 swift 我创建了一个子视图 上面有一个按钮 我想使用该按钮将我带到我的主视图控制器 我对不同的按钮使用了相同的功能 但是在同一文件中具有一个功能允许该按钮工作 代码如下 var playAgainButton UIBut
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • Swift Generics 在使用继承时不会实例化泛型

    我有课Alpha and Berry class Alpha class Berry Alpha 我有一个使用继承及其泛型的函数 func myFunc
  • 在没有预览窗口的情况下使用 AVCaptureVideoDataOutputSampleBufferDelegate

    我正在开发一个基于 Swift 的 macOS 应用程序 我需要捕获视频输入 但不将其显示在屏幕上 而不是显示视频 我想将缓冲的数据发送到其他地方进行处理 并最终显示它在 a 中的一个物体上SceneKit scene 我有一个Camera
  • GeoFire Swift 3 - 保存和更新坐标

    我正在尝试使用 GeoFire 将坐标存储到 Firebase 数据库中 我不确定如何更新新坐标 因为它们每秒都会更改 更新 随着childByAutoId 它正在为每辆自行车生成一个新的唯一 ID 如何引用这个唯一的自行车 ID 例如 用
  • 适用于 iPhone / iPad / iOS 的快速、精益 PDF 查看器 - 提示和提示?

    最近有很多关于绘制 PDF 的问题 是的 您可以使用UIWebView但这无法提供您所期望的优秀 PDF 查看器的性能和功能 您可以绘制PDF页面到 CALayer http www cocoabuilder com archive coc
  • Xcode 8 / Swift 3:“UIViewController 类型的表达式?未使用”警告

    我有以下函数 它之前编译得很干净 但在 Xcode 8 中生成警告 func exitViewController navigationController popViewController animated true UIViewCon

随机推荐

  • 运行 casperjs 的多个实例

    我需要同时运行 3 个 url 请求 我想到运行 3 个 casper 实例 每个实例获取一个 url 作为一个简单的例子 我尝试了 2 个实例 var casper require casper create casper start h
  • HashMap 通过考虑它们的值来映射整数数组

    鉴于以下代码 我得到null 我想要的是 1234 但我希望有一个可以将键视为相等的映射 如果int 是相等的 而不是认为int 我该怎么办呢 HashMap
  • Spring - 用新的属性文件值替换 bean 属性值

    我有一个属性文件 并使用 Spring 属性占位符 将值设置为 Spring bean 现在 该属性文件可以在运行时修改 有没有办法用这个新修改的属性值刷新 Spring bean 的属性 特别是 我有很多单例豆 我怎样才能用新值刷新它们
  • 将字符串转换为日期时间 dd/MM/yyyy hh:mm:ss tt

    我怎样才能转换这个7 3 2015 12 40 02 PM转换为具有格式的日期时间 dd MM yyyy hh mm ss tt 我已经这样做了 BreackEndTime DateTime ParseExact configViewMod
  • vim 中按名称对函数进行排序

    Vim 可以使用 sort 命令对行进行排序 我想使用 vim 对源代码中的函数进行排序 例如 前 def a pass def c pass def b pass after def a pass def b pass def c pas
  • 图像-Xamarin.Form

    我已经实现了一个登录页面 现在我想添加一个标题图像 但是 图像不会显示在视图上 public LoginView InitializeComponent Title Login Content new StackLayout Spacing
  • 如何在Asp.net CORE MVC中的浏览器上下载PDF文件

    我使用下面的代码来下载 pdf 格式的 SSRS 报告 string URL http ssrs test com ReportS UAT FOLDER URL URL SRNo 122 rs Command Render rs Forma
  • 在调试模式下启动服务器时,阻止 Eclipse 自动打开调试透视图

    有几个关于堆栈溢出的示例 说明如何在调试器激活 即遇到断点 这可以通过以下方式实现 首选项 gt 运行 调试 gt 透视图 gt 当应用程序挂起时打开关联的透视图 我的问题不是这个 每当我启动我的服务器在调试模式下 将打开调试透视图 由于我
  • std::vector 中如何管理动态内存?

    std vector如何实现对元素数量变化的管理 是使用realloc 函数 还是使用链表 Thanks 它使用作为第二个模板参数提供给它的分配器 那就这样吧 假设它在push back中 让t是要推送的对象 if size capacit
  • angularjs ng-repeat 按数字顺序排序字符串数组

    我有一个 id 类似的帖子列表1 2 3 4 5 6 7 8 9 10 11 12 json格式 id 的类型为字符串 但我想按照它的数字顺序来排序 正常 orderBy fiche id 列表显示如下 1 10 11 12 2 3 4 5
  • 在 Matlab 中使用 dlmcell 换行 - 在 Notepad++ 中显示,但在记事本中不显示

    我正在使用 Matlab 中的 dlmcell 函数来输出文本 每次使用 dlmcell 附加时 我都希望在新行上显示文本 当我在 Notepad 中打开书面文档时 每个文本片段都会按照我的需要换行 然而 用windows自带的记事本打开
  • 使用C库函数设置系统时间

    我可以使用 struct tm 和 time localtime asctime 获取系统时间 但是我需要有关如何使用 C 程序设置系统时间的帮助 如果您不想执行 shell 命令 您可以 正如您提到的 使用 settimeofday 我将
  • 如何创建具有值映射的自定义悬停工具

    我正在尝试创建一个自定义悬停工具 使用该工具获取绘图的 y 值并将该值映射到不同的值 到目前为止我可以想出的实现此功能的代码是 from bokeh models import HoverTool import holoviews as h
  • 将 ZonedDateTime 转换为字符串

    我需要将当前时间作为字符串存储在数据库中 时间可以位于不同的时区 因此我正在考虑使用 Java SE 8 的新 ZonedDateTime 类 我注意到 toString 方法自动输出 2016 04 15T17 40 49 305 05
  • PHP 每隔周三选择一次

    我需要帮助 选择从 2012 年 5 月 2 日开始每隔一个星期三 下面的代码选择从当前所在周开始每隔一个星期三 但我需要设置开始周 我熟悉 PHP 但不熟悉 php 日期 所以请尽可能具体 我找到了这个 number of dates 1
  • 使用 Jackson 注释序列化和解包 POJO 中的 Map 对象

    我有一个 POJO 其属性名为 paramMap 作为 Map 类型 import java util HashMap import java util Map import com fasterxml jackson annotation
  • 时间序列中的每小时平均值

    这是一个具有每小时智能电表数据且 freq 24 的时间序列 它是在三天内测量的 所以first day 1 24 second 25 48 third 49 72 我想要三天内每小时的平均值 例如 t 1 t 25 t 49 3 这样我就
  • 如何仅将 CSV 中的唯一值添加到 ComboBox 中?

    我想读取 csv 文件并将单词 Jakarta 和 Bandung 放入组合框中 这是输入 id from 1 Jakarta 2 Jakarta 5 Jakarta 6 Jakarta 10 Bandung 11 Bandung 12 B
  • ORA-28040: 没有匹配的身份验证协议

    即使按照以下设置 我仍然面临这个问题 更换ojdbc14 jar with ojdbc6 jar 也尝试过ojdbc5 jar Added SQLNET ALLOWED LOGON VERSION SERVER 8 到 sqlnet ora
  • 精灵套件中的裁剪/蒙版圆形图像节点会产生锯齿状边缘

    是否可以为没有锯齿状边缘的图像节点提供圆形蒙版 裁剪 按照苹果公司的这个例子 https developer apple com reference spritekit skcropnode 结果并不理想 您可以点击链接查看 let sha