草庐IT

Swift - 带三角形的模糊圆圈 - 模糊效果始终在顶部

coder 2023-09-17 原文

我正在尝试创建一个简单的圆形按钮并在该按钮内放置一个三角形,它实际上是一个播放按钮。问题是,当我将 BlurEffect 添加到按钮时,它始终位于顶部并且会隐藏三角形。有没有办法在模糊效果上方添加三角形?

import UIKit

@IBDesignable
class CirclePlayButton: UIButton {

    let blur = UIBlurEffect(style: .Light)

    override func drawRect(rect: CGRect) {
        let blurEffect = UIVisualEffectView(effect: blur)
        blurEffect.alpha = 0.9
        //self.addSubview(blurEffect)
        self.insertSubview(blurEffect, atIndex: 0)
        let path = UIBezierPath(ovalInRect: rect)
        blurEffect.frame = path.bounds


        let mask = CAShapeLayer()
        mask.path = path.CGPath
        blurEffect.layer.mask = mask


        let trianglePath = UIBezierPath()
        trianglePath.lineWidth = 2
        trianglePath.moveToPoint(CGPoint(x: bounds.width*1/4+5, y: bounds.height/4))
        trianglePath.addLineToPoint(CGPoint(x: bounds.width*3/4+5, y: bounds.height/2))
        trianglePath.addLineToPoint(CGPoint(x: bounds.width*1/4+5, y: bounds.height*3/4))
        trianglePath.addLineToPoint(CGPoint(x: bounds.width*1/4+5, y: bounds.height/4))
        UIColor.blackColor().setStroke()
        trianglePath.stroke()
    }
}

提前致谢。

最佳答案

找到解决方案

import UIKit

@IBDesignable
class CirclePlayButton: UIButton {

    @IBInspectable var fillColor: UIColor = UIColor.clearColor()
    @IBInspectable var lineColor: UIColor = UIColor.blackColor()
    var constantSize: CGFloat = 0.30
    var spaceX: CGFloat = 5
    @IBInspectable var percentSize: CGFloat {
        set(newValue){
            if newValue >= 0 && newValue <= 100{
                constantSize = newValue / 100
            } else {
                constantSize = 0.30
            }
        } get{
            return constantSize
        }
    }

    @IBInspectable var addSpace: CGFloat{
        set(newValue){
            if newValue >= 0 && newValue <= 10{
                spaceX = newValue
            } else {
                spaceX = 0
            }
        }get {
            return spaceX
        }
    }

    let blur: UIBlurEffect = UIBlurEffect(style: .Light)

    override func drawRect(rect: CGRect) {
        let topX = (bounds.width * constantSize) + spaceX
        let topY = bounds.height * constantSize

        let middleX = (bounds.width * (1 - constantSize)) + spaceX
        let middleY = bounds.height * 0.5

        let bottomX = topX
        let bottomY = bounds.height * (1 - constantSize)



        let blurEffect = UIVisualEffectView(effect: blur)
        blurEffect.alpha = 0.9
        let path = UIBezierPath(ovalInRect: rect)

        blurEffect.frame = path.bounds
        let mask = CAShapeLayer()
        mask.path = path.CGPath
        blurEffect.layer.mask = mask
        self.insertSubview(blurEffect, atIndex: 0)

        let trianglePath = UIBezierPath()
        trianglePath.lineJoinStyle = .Round

        trianglePath.moveToPoint(CGPoint(x: topX, y: topY))
        trianglePath.addLineToPoint(CGPoint(x: middleX, y: middleY))
        trianglePath.addLineToPoint(CGPoint(x: bottomX, y: bottomY))
        trianglePath.addLineToPoint(CGPoint(x: topX, y: topY))

        let maskImage = CAShapeLayer()
        maskImage.path = trianglePath.CGPath
        maskImage.lineJoin = kCALineJoinRound
        maskImage.lineWidth = 2
        maskImage.fillColor = fillColor.CGColor
        maskImage.strokeColor = lineColor.CGColor

        self.layer.addSublayer(maskImage)
    }
}

关于Swift - 带三角形的模糊圆圈 - 模糊效果始终在顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35670619/

有关Swift - 带三角形的模糊圆圈 - 模糊效果始终在顶部的更多相关文章

  1. ruby - 使用 RMagick 从图像中切出圆圈 - 2

    我想使用rmagick从图像中剪出一个圆圈。这是我希望能够完成的示例:-->好像我想用http://studio.imagemagick.org/RMagick/doc/draw.html#circle切一个圆,然后clip_path来掩盖它,但文档不是很清楚。谁能给我指出正确的方向? 最佳答案 require'rmagick'im=Magick::Image.read('walter.jpg').firstcircle=Magick::Image.new200,200gc=Magick::Draw.newgc.fill'black

  2. ruby - 在不同的文件中设置断点没有效果 - 2

    ruby调试器不会在我在与执行开始时不同的文件中设置的断点处停止。例如,考虑这两个文件,foo.rb:#foo.rbclassFoodefbarputs"baz"endend和main.rb:#main.rbrequire'./foo'Foo.new.bar我使用ruby-rdebug.\main.rb开始调试。现在,当我尝试使用b./foo.rb:4在另一个文件的特定行上设置断点时,我收到消息Setbreakpoint1atfoo.rb:4,但是当我cont时,程序执行到最后,调试器永远不会停止。但是,如果我在main.rb中的一行上打断,例如b./main.rb:3,或者一个方法,

  3. ruby-on-rails - 使用 Rails (Tire) 和 ElasticSearch 进行模糊字符串匹配 - 2

    我有一个Rails应用程序,现在设置了ElasticSearch和Tiregem以在模型上进行搜索,我想知道我应该如何设置我的应用程序以对模型中的某些索引进行模糊字符串匹配。我将我的模型设置为索引标题、描述等内容,但我想对其中一些进行模糊字符串匹配,但我不确定在何处进行此操作。如果您想发表评论,我将在下面包含我的代码!谢谢!在Controller中:defsearch@resource=Resource.search(params[:q],:page=>(params[:page]||1),:per_page=>15,load:true)end在模型中:classResource'Us

  4. Ruby:模糊测试所有 unicode 字符(UTF8/编码/字符串操作) - 2

    我无法遍历整个unicode字符范围。我到处找...我正在构建一个模糊器,并希望将所有unicode字符(一次一个)嵌入到一个url中。例如:http://www.example.com?a=\uff1c我知道有一些内置工具,但我需要更多的灵active。如果我能像下面那样做:"\u"+"ff1c"那就太好了。这是我得到的最接近的:char="\u0000"...#withiniterationchar.succ!...但在字符"\u0039"之后,即数字9,我将得到"10"而不是":" 最佳答案 您可以使用pack将数字转换为UT

  5. ruby-on-rails - Ruby表达式 '-'后留空格的效果 - 2

    今天我在我的Rails控制台中尝试了一些东西,这发生了,2.0.0p247:009>Date.today-29.days=>Fri,07Feb20142.0.0p247:010>Date.today-29.days=>Thu,09Jan2014我很困惑。我可以看到我缺少一些基本的东西。但这让我印象深刻!谁能解释为什么会这样? 最佳答案 实际发生的是这样的:Date.today(-29.days)#=>Fri,07Feb2014today有一个名为start的可选参数,默认为Date::ITALY。Anoptionalargument

  6. Unity 血条及“掉血”缓冲效果 - 2

     视频教程:https://www.bilibili.com/video/BV1WJ411778C/?spm_id_from=333.999.0.0&vd_source=4a4c35da6aef7094d5990c213c39aa09使用素材(推荐使用GitZipforgithub下载):https://github.com/zheyuanzhou/Youtube-Unity-Tutorial/tree/master/EP45_Health%20Bar/Sprites效果如下图所示:首先在场景中创建一个新的Canvas,并命名为HeathBar,并创建三个Image作为前者的子物体,分别命名为

  7. ruby - 如果 `self` 始终是 Ruby 中的隐含接收者,为什么 `self.puts` 不起作用? - 2

    在Ruby中,我的理解是self是任何裸方法调用的隐含接收者。然而:~:irb>>puts"foo"foo=>nil>>self.puts"foo"NoMethodError:privatemethod`puts'calledformain:Object这是什么原因?如果有任何帮助:>>method(:puts).owner=>Kernel 最佳答案 私有(private)方法不能有接收者我认为答案是这样的:Ruby强制方法隐私的方式是它不允许使用显式接收者调用私有(private)方法。一个例子:classBakerdefbake

  8. 微信小程序顶部标题栏与胶囊对齐 - 2

    介绍    最近在做微信小程序时,顶部标题栏总是与胶囊对不齐。往往是在这款手机上对齐了,在另外一款手机差很多。我在查阅资料后,提出了一种方法解决这个问题,即:在页面onLoad或组件created时,利用微信小程序提供的API,获取系统状态栏高度和胶囊信息,进而动态调整顶部标题栏样式。在苹果、小米、荣耀手机做验证,能做到精准对齐。理论        胶囊样式应该是垂直居中,有1px的border,border-radius为18px。        若要使顶部标题栏与胶囊对齐,则其高度必须是导航栏高度,标题栏内容也要垂直居中,顶部标题栏的外边距或内边距必须是状态栏高度。        如果顶部

  9. ruby-on-rails - 使用 Barby gem 打印 - 条码图像模糊 - 2

    有人使用Barbygem(https://github.com/toretore/barby)来生成和打印条形码吗?我正在生成和打印png条形码文件,但它们变得模糊不清。请注意,生成的PNG文件看起来很棒,即使在放大条形图时也是如此,但打印时边缘模糊。我正在使用同一台打印机打印与我在其他地方获得的相同尺寸和格式的条形码,它们看起来漂亮而清晰。这是我正在使用的代码,以防有人对我如何让它看起来更好有任何想法。它目前无法使用,因为扫描仪无法读取它。我注意到创建的png有72dpi,似乎没有办法让它更高。这可能与此有关,也可能无关。require'barby'require'barby/bar

  10. ruby-on-rails - 即使在编辑模式下,rails 嵌套形式始终为 "POST"?导致路由错误 - 2

    我正在开发一个应用程序有1个具有多对多关系的模块,它工作正常,我可以用嵌套形式创建我的“单元”,但是当我处于编辑状态时我遇到了1个问题,当我点击提交按钮时它抛出了一个错误。Noroutematches[POST]"/units/27"ithoughttheactionshouldbepatchinsteadofpost??iinspectthegeneratedhtmlinbrowsers,andicanseethereisahiddenfieldnamed"_method"with"patch"value.我用脚手架生成了这个模块单位模型classUnit:unitrentperio

随机推荐