SwiftUI-Image组件学习

SwiftUI 中,Image 组件用于显示图片。你可以通过多种方式加载和展示图片,比如从资产库、系统图标、或者从网络加载图片。

1. 从资产库中加载图片
  • 如果你的图片已经添加到了Xcode项目的资产中,你可以直接通过图片的名称来加载它:
scss 复制代码
Image("imageName")
    .resizable()  // 如果需要调整图片的大小
    .scaledToFit()  // 让图片自适应容器大小
    .frame(width: 200, height: 200)  // 设置图片的尺寸
  • 需要调整图片的大小,比如加载.9图时的示例
less 复制代码
Image("icon_pro_textview_bg2x.9")
            .resizable(capInsets: EdgeInsets(top: 40, leading: 40, bottom: 40, trailing: 40),
                       resizingMode: .stretch)  // 或者 .tile
            .scaledToFit()
            .frame(width: 335,height: 150)
2. 从系统图标加载图片
  • SwiftUI 提供了多种系统图标,你可以使用 Image(systemName:) 来加载:
css 复制代码
Image(systemName: "star.fill")
    .font(.system(size: 50))
    .foregroundColor(.yellow)
  • 系统资源的图标可以在这里下载点我
3. 从 URL 加载图片
  • 从网络加载图片需要结合 AsyncImage 来实现:
scss 复制代码
AsyncImage(url: URL(string: "https://www.example.com/image.png")) { image in
    image.resizable()
        .scaledToFit()
        .frame(width: 200, height: 200)
} placeholder: {
    ProgressView()  // 加载时显示的占位符
}
4. 修改图片样式
1. resizable()
  • 使图片可调整大小,通常与 frame() 或其他布局修饰符结合使用。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
2. scaledToFit() / scaledToFill()
  • scaledToFit():确保图片按比例缩放,直到它适合容器的大小,并保持图片的宽高比。
  • scaledToFill():将图片缩放并填满整个容器,可能会改变图片的比例。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()  // 图片会保持比例,适应容器
    .frame(width: 200, height: 200)

或者:

scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFill()  // 图片会被填满容器,但可能会裁剪
    .frame(width: 200, height: 200)
    .clipped()  // 裁剪超出框架的部分
3. frame(width:height:)
  • 设置图片的固定尺寸。
scss 复制代码
Image("imageName")
    .resizable()
    .frame(width: 200, height: 200)
4. clipShape()
  • 用来将图片裁剪为指定的形状。例如:圆形、椭圆、矩形、路径等。
scss 复制代码
Image("imageName")
    .resizable()
    .clipShape(Circle())  // 将图片裁剪成圆形
    .frame(width: 200, height: 200)
5. cornerRadius()
  • 设置图片的圆角效果。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .cornerRadius(20)  // 圆角半径为 20
6. shadow(radius:)
  • 给图片添加阴影效果。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .shadow(radius: 10)  // 阴影半径为 10
7. overlay()
  • 在图片上添加叠加的视图(如文本、形状等)。
less 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .overlay(
        Text("Overlay Text")
            .foregroundColor(.white)
            .font(.largeTitle)
            .padding()
            .background(Color.black.opacity(0.5))
            .cornerRadius(10)
    )
8. opacity()
  • 控制图片的透明度。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .opacity(0.5)  // 设置透明度为 50%
9. rotationEffect()
  • 旋转图片。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .rotationEffect(.degrees(45))  // 旋转 45 度
10. blur(radius:)
  • 为图片添加模糊效果。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .blur(radius: 10)  // 模糊半径为 10
11. foregroundColor()
  • 改变图片的颜色,通常与 Image(systemName:) 和符号图标一起使用。
less 复制代码
Image(systemName: "star.fill")
    .font(.system(size: 50))
    .foregroundColor(.yellow)  // 设置颜色为黄色
12. alignment
  • 用于在图片框内控制对齐方式。通常配合 frame 使用。
less 复制代码
Image("imageName")
    .resizable()
    .frame(width: 200, height: 200, alignment: .topTrailing)  // 对齐到右上角
13. padding()
  • 给图片添加内边距,图片距离容器的边距
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .padding(20)  // 添加 20 的内边距
14. border()
  • 给图片添加边框。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .border(Color.black, width: 5)  // 设置边框为黑色,宽度为 5
15. rotation3DEffect()
  • 进行 3D 旋转。
less 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .rotation3DEffect(
        .degrees(45), axis: (x: 1, y: 0, z: 0)
    )
16. transformEffect()
  • 对图片进行变换操作,如缩放、旋转、平移等。
scss 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(width: 200, height: 200)
    .transformEffect(CGAffineTransform(rotationAngle: .pi / 4))  // 旋转图片
17. frame(minWidth:maxWidth:minHeight:maxHeight:alignment:)
  • 控制图片的框架尺寸,包括最小和最大宽高。
less 复制代码
Image("imageName")
    .resizable()
    .scaledToFit()
    .frame(minWidth: 100, maxWidth: 300, minHeight: 100, maxHeight: 300)
5. 结合其他组件使用
  • 你也可以将 Image 与其他布局组件结合使用,比如 VStackHStack
scss 复制代码
VStack {
    Image("imageName")
        .resizable()
        .scaledToFit()
        .frame(width: 200, height: 200)
    Text("This is an image")
        .font(.title)
}
相关推荐
专业开发者19 小时前
调试 iOS 蓝牙应用的新方法
物联网·macos·ios·cocoa
tangbin5830851 天前
iOS Swift 可选值(Optional)详解
前端·ios
卷心菜加农炮1 天前
基于Python的FastAPI后端开发框架如何使用PyInstaller 进行打包与部署
ios
北极象2 天前
千问大模型接入示例
ios·iphone·qwen
ipad协议开发2 天前
企业微信 iPad 协议应用机器人开发
ios·企业微信·ipad
QuantumLeap丶3 天前
《Flutter全栈开发实战指南:从零到高级》- 26 -持续集成与部署
android·flutter·ios
2501_915918413 天前
TCP 抓包分析在复杂网络问题中的作用,从连接和数据流层面理解系统异常行为
网络·网络协议·tcp/ip·ios·小程序·uni-app·iphone
二流小码农3 天前
鸿蒙开发:个人开发者如何使用华为账号登录
android·ios·harmonyos
wvy3 天前
Xcode 26还没有适配SceneDelegate的app建议尽早适配
ios
游戏开发爱好者83 天前
苹果 App 上架流程,结合 Xcode、CI 等常见工具
macos·ios·ci/cd·小程序·uni-app·iphone·xcode