美文网首页
SwiftUI学习-(第2节)

SwiftUI学习-(第2节)

作者: BoxJing | 来源:发表于2023-06-11 13:32 被阅读0次

这一篇文章我们简单实现一个有图片展示,有按钮事件的小页面。

1.Image

官方推荐我们的本地图片都放在Assets中,然后使用Image直接用图片名称进行加载,那有些开发者喜欢将图片放在自己的文件夹中,如何来进行展示,可以封装一个loadImage方法:

func loadImage() -> UIImage? {
     if let imagePath = Bundle.main.path(forResource: "top@3x", ofType: "png", inDirectory: nil) {
          return UIImage(contentsOfFile: imagePath)
     }
    return nil
}

可以使用Image(uiImage:)初始化器将UIImage转换为SwiftUI的Image视图,确保加载的路径一定是准确的即可。

if let image = loadImage() {
     Image(uiImage: image)
          .resizable()
          .scaledToFit()
}

整个效果如下图所示:

加载本地图片
如果这个图片是放在Assets中使用起来就非常方便的:
Image("top")
     .resizable()
     .scaledToFit()
2.Button

Button最基本的初始化方法public init(_ titleKey: LocalizedStringKey, action: @escaping () -> Void),非常的方便,我们就赋值一个文字,填写方法事件就可以了:

Button("显示文字") {
     //事件方法体
}

还有一种更丰富的初始化方法,这个方法中label的返回体是一个任意组装的View,比如下面的代码,我们构造出一个左图右文的展示按钮:

Button {
//    事件
} label: {
   HStack {
      Image(systemName: "globe")
           .imageScale(.large)
           .foregroundColor(.blue)
      Text("哈哈")
   }
}
3.@State

在开发中经常会遇到修改某个值后然后刷新UI,理想的办法就是监听这个值,有变化就自动刷新UI,在SwiftUI中提供了@State这个属性包装器非常方便,允许我们绕过结构体的限制:我们知道不能更改它们的属性,因为结构是固定的,但是@State允许SwiftUI将该值单独存储在可以修改的地方。

struct ContentView: View {
    let arr = ["选项1","选项2","选项3","选项4","选项5","选项6"]
    @State private var selectedItem:String?
    var body: some View {
        VStack {
            Image("top")
                 .resizable()
                 .scaledToFit()
            if (selectedItem != nil) {
                Text(selectedItem ?? "")
                    .font(.largeTitle)
            }
            Button("随机一个") {
                print("选择了")
                selectedItem = arr.shuffled().filter{$0 != selectedItem}.first
            }
            .font(.title)
            .buttonStyle(.borderedProminent)
            .padding(.top, 5)
            Button("重置") {
                selectedItem = nil
            }
            .font(.title)
            .buttonStyle(.borderless)
            .padding(.top, 20)
        }
    }
}

以上代码就是当用户选择随机一个后,会从arr中随机取出一个和当前不一样的选项显示出来,重置后,显示项目直接隐藏掉,效果比较突兀:

效果图
在SwiftUI中,系统提供了方便的动画效果:
@available(iOS 13.0, macOS 10.15, tvOS 13.0, watchOS 6.0, *)
extension View {

    /// Applies the given animation to this view when the specified value
    /// changes.
    ///
    /// - Parameters:
    ///   - animation: The animation to apply. If `animation` is `nil`, the view
    ///     doesn't animate.
    ///   - value: A value to monitor for changes.
    ///
    /// - Returns: A view that applies `animation` to this view whenever `value`
    ///   changes.
    @inlinable public func animation<V>(_ animation: Animation?, value: V) -> some View where V : Equatable

}

直接在VStack中加入动画效果,监听selectedItem值的变化,当该值变化就开始动画效果,就不会那么生硬突兀了:

.animation(.easeOut(duration: 0.24),value: selectedItem)

UI在布局的时候,比如在同一个容器中我们如果使用同样的字体大小,不用在内部每个View设置,直接在父View中.font来设置就行,如果内部某个不同,只需要针对某个控件再单独设置,其他属性同样的道理。

相关文章

  • SwiftUI 简介

    推荐学习SwiftUI官网[https://swiftui.jokerhub.cn]学习,下面大多是官网的解释,感...

  • swiftUI 常用控件介绍

    最近在学习swiftUI,首先来介绍一下swiftUI的一些基本用法,swiftUI和Flutter的语法比较类似...

  • SwiftUI 02-构建列表和导航(Building List

    本章Demo 链接Blog 链接 简介 此示例是记录学习SwiftUI的过程,原文出自SwiftUI Essent...

  • JPDesignCode for iOS15

    SwiftUI学习项目 学自于国外一个很出名的SwiftUI课程:DesignCode[https://desig...

  • WWDC21 学习系列之 SwiftUI 支持将 Markdo

    新特性 SwiftUI 支持将 Markdown 直接传递给文本Text 示例代码 加入我们一起学习SwiftUI...

  • Swift5之开篇

    开始学习Swift5,记录一下学习的内容。 昨天开始看apple的文档,感受了下SwiftUI,SwiftUI5的...

  • SwiftUI学习

    官方基础工程简介 AppDelegate.swift 负责外部事件监听 SceneDelegate.swift 负...

  • SwiftUI学习

    学习文章 文集:Hacking with iOS: SwiftUI Edition[https://www.jia...

  • SwiftUI 中实现 K-Means 聚类,了解如何在 Swi

    想为您的 SwiftUI 应用程序添加强大的机器学习算法吗?跟着! SwiftUI 是一个用于在 Apple 平台...

  • SwiftUI控件

    SwiftUI控件 SwiftUI学习的内容还是很多的,但是我们只对我们项目实战内容所涵盖的知识点进行讲解,接下来...

网友评论

      本文标题:SwiftUI学习-(第2节)

      本文链接:https://www.haomeiwen.com/subject/xlvxydtx.html