SwiftUI WWDC21 Swift新特性之 Swift 5.5 Double 和 CGFloat 值之间的自动转换

Swift 5.5 编译器现在可以自动执行Double和CGFloat值之间的转换。

我们现在可以自由地将Double值传递给接受 a 的函数,CGFloat反之亦然。因此,我们可以选择使我们的两个属性CGFloat值都成为双精度值,或者完全删除类型信息并让编译器推断它们是双精度值:

struct DecorationImage: View {
    var name: String
    var scale = 0.5
var opacity = 0.8

    var body: some View {
        Image(name)
            .scaleEffect(scale)
            .opacity(opacity)
    }
}

加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现SwiftUI画廊滑动自动对中间作为选中,可以使用SwiftUI的GeometryReader和ScrollView组件。具体步骤如下: 1. 创建一个GeometryReader组件,用于获取父容器的大小,并设置一个变量用于保存这个大小。 ``` @State private var containerWidth: CGFloat = 0 var body: some View { GeometryReader { geometry in // 保存容器的宽度 self.containerWidth = geometry.size.width // 省略其他代码 } } ``` 2. 创建一个ScrollView组件,设置水平滚动方向,并添加一个HStack子视图,用于显示所有的图片。 ``` ScrollView(.horizontal) { HStack(spacing: 0) { // 添加所有图片 } } ``` 3. 在HStack中添加图片时,可以使用GeometryReader获取每个图片的位置和大小,并计算出每个图片的中心点位置。 ``` HStack(spacing: 0) { ForEach(images, id: \.self) { imageName in GeometryReader { geometry in Image(imageName) .resizable() .aspectRatio(contentMode: .fit) .frame(width: geometry.size.width, height: geometry.size.height) .position(x: geometry.frame(in: .global).midX, y: geometry.frame(in: .global).midY) } .frame(width: self.containerWidth) } } ``` 4. 在ScrollView的onAppear回调函数中,可以通过UIKit的Timer定时器来实现自动滚动。每次滚动时,计算出中心点位置距离最近的图片,并使用ScrollView的scrollTo函数将其滚动到中心位置。 ``` ScrollView(.horizontal) { HStack(spacing: 0) { ForEach(images, id: \.self) { imageName in // 省略图片代码 } } .onAppear { // 使用Timer定时器实现自动滚动 Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { timer in // 计算出中心位置距离最近的图片 let centerX = UIScreen.main.bounds.width / 2 var minDistance = CGFloat.infinity var selectedImageIndex = 0 for i in 0..<self.images.count { let image = self.images[i] let geometry = self.geometryList[i] let distance = abs(geometry.frame(in: .global).midX - centerX) if distance < minDistance { minDistance = distance selectedImageIndex = i } } // 将最近的图片滚动到中心位置 self.selectedImageIndex = selectedImageIndex self.scrollView.scrollTo(self.geometryList[selectedImageIndex], anchor: .center) } } } ``` 最后,根据选中的图片下标,可以在页面上显示一个选中标记,例如使用一个圆点或者一个高亮边框等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识大胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值