SwiftUI:使用具有可变模糊效果的 RotationGesture

Posted

技术标签:

【中文标题】SwiftUI:使用具有可变模糊效果的 RotationGesture【英文标题】:SwiftUI: using RotationGesture with changeable blur effect 【发布时间】:2020-06-08 05:51:53 【问题描述】:

我正在尝试将 RotationGesture 与可变模糊效果相结合。因此,如果您将目镜向右转动,您会得到像在双筒望远镜中一样清晰的图像。左转,又会模糊。下面的代码基本上是在做,但不是很顺利。你有什么改善效果的想法吗?

struct ContentView: View 
@State var blurring: CGFloat = 20
@State var sharping: CGFloat = 0
@State private var rotateState: Double = 0

var body: some View 

    ZStack 

        Image("cat")
            .resizable()
            .frame(width: 200, height: 200)
            .blur(radius: blurring)
            .clipShape(Circle())

        Image("ocular_rk2")
            .resizable()
            .frame(width: 350, height: 350)
            .rotationEffect(Angle(degrees: self.rotateState))
            .gesture(RotationGesture()
                .onChanged  value in
                    self.rotateState = value.degrees
                    self.changeBlur()
                
                .onEnded  value in
                    self.rotateState = value.degrees
                    print(self.rotateState)
                
            )

    




func changeBlur() 
    switch rotateState 
    case -10000...10000: sharping = 0.1

    default:
        print("# Mistake in Switch")
    

    if rotateState < 0 
        blurring += sharping
     else 
        blurring -= sharping
    
 


【问题讨论】:

【参考方案1】:

检查一下(我测试过,它有效)

也许您应该考虑更改一些值,因为您必须旋转一段时间才能看到文本。

顺便说一句:发布可编译的可重现代码总是一种好方法(我们没有您的图片)...

struct ContentView: View 
    @State var blurring: CGFloat = 20
    @State var sharping: CGFloat = 0
    @State private var rotateState: Double = 0

    var body: some View 

        ZStack 

            Text("cat")
           //     .resizable()
                .frame(width: 200, height: 200)
                .clipShape(Circle())
                .background(Color.yellow)

            Text("ocular_rk2")
               // .resizable()
                .blur(radius: blurring)

                .frame(width: 350, height: 350)
                .background(Color.red)
                .rotationEffect(Angle(degrees: self.rotateState))
                .gesture(RotationGesture()
                    .onChanged  value in
                        self.rotateState = value.degrees
                        self.changeBlur()
                
                .onEnded  value in
                    self.rotateState = value.degrees
                    print(self.rotateState)
                    
            )

        

    


    func changeBlur() 
        switch rotateState 
        case -10000...10000: sharping = 0.1

        default:
            print("# Mistake in Switch")
        

        if rotateState < 0 
            blurring = blurring + sharping
         else 
            blurring = blurring - sharping
            print(blurring)
        
    


【讨论】:

克里斯,据我所知,您只是复制了我的代码,将图像更改为文本。这可能对其他人更有礼貌,但这不是我问题的答案。 Roman,只要测试一下,你就会发现,它有效——而你的却没有。如果你看不出区别——而且有一个重要的区别——我无法帮助你

以上是关于SwiftUI:使用具有可变模糊效果的 RotationGesture的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中将模糊效果作为背景?

如何在 SwiftUI 文本元素中创建可变字符串?

创建具有微妙模糊效果的透明 UIView

滚动时更改元素的高度

具有淡入边缘效果的模糊视图 - iOS

Swift 3 中具有模糊效果的背景自定义相机视图