SwiftUI(4)

这篇具有很好参考价值的文章主要介绍了SwiftUI(4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、视图大小调整:

1. .frame(width:,height:)

2. .clipped()

3. .resizable()

4. .aspectRatio()

5.GeometryReader

二、滚动视图

1.frame(maxWidth: .infinity)

2.init

三、导航连接

四、路径

五、SwiftUI中新地图框架MapKit

1.使用的基本步骤:

2.地图交互

3.地图样式

4.地图控件

Map(scope: mapScope) { ... }

MapCompass(scope: mapScope)

.mapScope(mapScope)

.mapControls { ... }

MapPitchToggle()

MapUserLocationButton()

MapCompass()

5.地图相机位置


一、视图大小调整:

1. .frame(width:,height:)

SwiftUI(4),swiftui,ios,swift

width 和 height 参数指定了视图的宽度和高度

2. .clipped()

用于确定当视图的内容超出其边界时是否应该裁剪(即隐藏)超出的部分。当应用 clipped 修饰符时,任何超出视图边界的内容都将被裁剪掉,不会显示。如果不应用 clipped 修饰符,则超出视图边界的内容可能会根据视图的具体情况而显示或隐藏。

3. .resizable()

默认情况下,某些视图(如 Image)具有固定的尺寸,并且不会根据其父视图的布局自动调整大小。通过应用 resizable 修饰符,可以改变这种行为,使视图内容能够响应不同的尺寸要求。

4. .aspectRatio()

用于设置视图的宽高比。这个修饰符允许指定一个固定的比例,以确保视图在调整大小时保持这个比例不变。这对于创建具有特定比例(如正方形、矩形或特定宽高比的图像)的视图非常有用。

例如:创建一个正方形的视图,可以使用 .aspectRatio(1, contentMode: .fit).contentMode 参数用于指定当视图的内容与其边界不匹配时如何处理内容。.fit 意味着内容将按比例缩放以适应视图的边界。而fill就以为着填充。

5.GeometryReader

一个特殊的视图容器,它用于读取并传递其内容的几何信息(如尺寸和坐标)给其子视图。GeometryReader 本身并不渲染任何可视内容,而是将其子视图放置在一个能够访问其大小和布局信息的环境中。

例如:

SwiftUI(4),swiftui,ios,swift

  1. GeometryReader { geo in ... }GeometryReader 是一个特殊的视图容器,用于读取并传递其内容的几何信息(如尺寸和坐标)给其子视图。在这个例子中,geo 是个 GeometryProxy 对象,它代表了 GeometryReader 的内部空间。

  2. Image("Example"): 这创建了一个显示名为 "Example" 的图片的视图。

  3. .resizable(): 这使得图像可以调整大小。默认情况下,一些图像可能不允许调整大小,因此这个修饰符是必要的,特别是根据 GeometryReader 的尺寸来缩放图像时。

  4. .aspectRatio(contentMode: .fit): 这确保了图像在缩放时保持其原始的宽高比。.fit 内容模式意味着图像将被缩放以适应其容器的大小,同时保持其原始的宽高比,这可能导致图像的某些部分在缩放时不可见(即被裁剪)。

  5. .frame(width: geo.size.width): 这设置了图像的宽度为 GeometryReader 的宽度(geo.size.width)。由于图像的宽高比被保持,其高度将自动调整以匹配这个宽度。

二、滚动视图

1.frame(maxWidth: .infinity)

特定的调用设置了视图的最大宽度为无限大(.infinity)。这通常意味着希望这个视图在其父容器中尽可能宽,但不超过其父容器的实际宽度。这常用于创建一个水平填充的视图,使其宽度与其父容器匹配,而高度则根据内容或其他约束来确定。

例如,假设有一个水平滚动的视图(如 ScrollView),并且希望其中的内容视图尽可能宽以填充整个滚动区域,可以使用其实现。

2.init

init 是用来初始化视图结构体的特殊方法。创建一个遵循 View 协议的结构体时,通常需要提供一个或多个初始化方法(init 函数),以便能够创建该视图的实例并设置其初始状态。

在 SwiftUI 中,初始化方法可以有多种形式,但通常它们会接受一些参数,这些参数用于配置视图的初始属性。这些参数可以是简单的数据类型,如 StringIntColor 等,也可以是其他视图或自定义类型的实例。

例如:

SwiftUI(4),swiftui,ios,swift

三、导航连接

SwiftUI(4),swiftui,ios,swift

  1. NavigationLink:

    • NavigationLink 是 SwiftUI 中用于创建导航链接的组件。当用户点击这个链接时,它会导航到一个新的视图或屏幕。
    • NavigationLink 通常与 NavigationView 一起使用,以提供完整的导航体验。
  2. destination::

    • destination 是 NavigationLink 的一个参数,它指定了当用户点击链接时要导航到的目标视图。

四、路径

Path 是一个用于创建自定义图形形状的结构体。通过使用 Path,可以绘制复杂的图形、线条、曲线等,并在 SwiftUI 视图中显示它们。Path 提供了一系列的方法来定义路径的各个部分,如线条的起点、终点、控制点等。

例如:

SwiftUI(4),swiftui,ios,swift

  1. Path { ... }
    使用 Path 结构体来创建一个自定义路径。Path 结构体用于绘制自定义形状。

  2. { path in ... }
    这是一个闭包,它接受一个 Path 类型的参数 path,用于定义路径的各个部分。

  3. path.move(to: CGPoint(x: 200, y: 100))
    设置路径的起始点。这里,起始点的坐标是 (200, 100)。

  4. path.addLine(to: CGPoint(x: 100, y: 300))
    从当前点(起始点)画一条直线到点 (100, 300)。

  5. path.addLine(to: CGPoint(x: 300, y: 300))
    从上一个点 (100, 300) 画一条直线到点 (300, 300)。

  6. path.addLine(to: CGPoint(x: 200, y: 100))
    从上一个点 (300, 300) 画一条直线回到起始点 (200, 100)。

  7. .stroke(Color.blue.opacity(0.25), lineWidth: 10)
    对 Path 应用一个修饰符来指定它应该如何被绘制。这里使用 .stroke 修饰符,它定义了路径的描边颜色(半透明的蓝色)和线条宽度(10点)。

五、SwiftUI中新地图框架MapKit

在 SwiftUI 中,MapKit 框架用于在应用中集成地图功能。MapKit 提供了丰富的 API 来显示地图、添加标注、绘制覆盖物以及响应用户交互。虽然 SwiftUI 本身是一个声明式 UI 框架,专门用于构建用户界面,但 MapKit 并不是专门为 SwiftUI 设计的。然而,仍然可以在 SwiftUI 应用中使用MapKit,并通过 UIViewControllerRepresentable 协议将其集成到 SwiftUI 视图层次结构中。

如何在 SwiftUI 中使用 MapKit ?

1.使用的基本步骤:

1.创建 MapView

首先,需要创建一个遵守 UIViewControllerRepresentable 协议的封装器,这样就可以在 SwiftUI 中使用 MapKit 的 MKMapView

 2. 在 SwiftUI 中使用 MapView

3. 添加标注和覆盖物

还可以使用 MapKit 的其他功能,如添加标注(annotations)和覆盖物(overlays)。这通常涉及实现 MKMapViewDelegate 的相关方法,并在 MKMapView 实例上设置标注和覆盖物。
4. 响应地图交互

通过实现 MKMapViewDelegate 的方法,可以响应用户的地图交互,如缩放、平移、选择标注等。
5. 自定义样式和行为

MapKit 提供了丰富的选项来自定义地图的样式和行为,包括改变地图类型(如标准、卫星、混合等)、显示交通状况、添加指南针控件等。

2.地图交互

为了控制用户与地图的交互方式,可以传递一组允许的模式。默认情况下允许所有模式(平移、缩放、倾斜、旋转)。

SwiftUI(4),swiftui,ios,swift

~Map 是一个用于显示地图的视图。interactionModes 参数允许指定用户可以与地图进行哪些交互。.pan 和 .pitch 是 MapInteractionMode 枚举中的两个值,分别表示平移和倾斜交互。

  • .pan: 允许用户通过拖动来平移地图。
  • .pitch: 允许用户通过手势来改变地图的倾斜角度。

当在 Map 视图中使用 interactionModes: [.pan, .pitch] 时,正在指定用户可以与地图进行平移和倾斜操作。

3.地图样式

SwiftUI(4),swiftui,ios,swift

  • Map { ... }: 这里是一个 Map 视图的基本定义。可以在其中定义地图的中心坐标、区域、交互模式等,以及为每个标注定义自定义视图表示(如果需要的话)。

  • .mapStyle(...): 这是一个修饰符,用于设置地图的样式。

  • .hybrid(...): 这指定了地图的样式为混合样式,即结合了普通地图和卫星图像

  • showsTraffic: true: 这表示地图将显示交通状况信息,如道路拥堵情况等

  • pointsOfInterest: .including([.publicTransport]): 这表示地图将显示兴趣点,并且特别包括公共交通站点。pointsOfInterest 可以用来控制地图上哪些类型的兴趣点应该被显示。在这个例子中,它只显示了公共交通站点。

  • elevation: .realistic: 设置地图的高程为现实主义风格,这通常意味着地形特征(如山丘、建筑物等)会以更真实的方式呈现。

通过链式调用 .mapStyle 修饰符并传入相应的参数,可以很容易地定制 Map 视图的外观和行为,以满足你的应用需求。

请注意,为了使 Map 视图正常工作,应用需要链接 MapKit 框架,并且需要在 Info.plist 文件中添加相应的权限(如果你的应用需要访问用户的位置信息)。此外,.mapStyle 修饰符及其参数可能在不同的 iOS 版本中有所不同。

4.地图控件

标准的地图控件,如指南针、用户位置、倾斜、比例尺和缩放控件都实现为 SwiftUI 视图。

SwiftUI(4),swiftui,ios,swift

Map(scope: mapScope) { ... }

Map 是一个用于显示地图的视图。它接受一个 scope 参数,该参数是一个命名空间对象,用于同步地图的状态。在这个例子中,mapScope 被传递给 Map 视图,这意味着 Map 视图将使用这个命名空间对象来同步其状态。

在 { ... } 闭包中,你可以定义地图的各种属性和行为,比如坐标区域、标注、交互模式等。具体的实现细节没有在这个代码片段中给出。

MapCompass(scope: mapScope)

MapCompass 可能是一个自定义的指南针视图,用于显示地图的当前方向。它也接受一个 scope 参数,并使用了相同的 mapScope 命名空间对象。这意味着 MapCompass 视图将与 Map 视图同步,显示相同的方向或状态。

.mapScope(mapScope)

这个修饰符可能是自定义的,用于将 mapScope 命名空间与 VStack 视图(以及它的子视图)相关联。这确保了任何依赖 mapScope 的子视图或组件都可以正确地与之交互。具体的实现细节取决于这个修饰符是如何定义的。

SwiftUI(4),swiftui,ios,swift

.mapControls { ... }

这是一个自定义修饰符(或可能是一个假设的修饰符,因为 SwiftUI 标准库中并没有 .mapControls 这个修饰符)。从名字上推测,这个修饰符可能用于添加或管理地图的控件,如缩放控件、指南针、用户位置按钮等。

MapPitchToggle()

MapPitchToggle 可能是一个自定义的视图组件,用于切换地图的倾斜角度(pitch)。在地图应用中,pitch 是指地图相对于地面的倾斜程度。通过这个控件,用户可以选择查看地图的平面视图或三维视图。

MapUserLocationButton()

MapUserLocationButton 可能是一个显示用户当前位置的按钮。当用户点击这个按钮时,地图通常会重新定位到用户的当前位置,并可能以某种方式标记这个位置。这是许多地图应用中常见的功能。

MapCompass()

MapCompass 是显示地图指南针的视图组件。指南针通常用于指示地图的北方向,帮助用户确定方向。在一些复杂的地图应用中,指南针还可能包含其他导航信息或功能。

5.地图相机位置

SwiftUI(4),swiftui,ios,swift

initialPosition 是 Map 视图的一个初始化参数,用于设置地图首次显示时的位置和缩放级别。

initialPosition 参数通常接受一个 MKCoordinateRegion 类型的值,这个值包含了地图的中心坐标 (CLLocationCoordinate2D) 和一个表示地图显示区域大小的 MKCoordinateSpanCLLocationCoordinate2D 由纬度和经度组成,而 MKCoordinateSpan 由纬度和经度的跨度(即地图显示的区域范围)组成。文章来源地址https://www.toymoban.com/news/detail-851866.html

到了这里,关于SwiftUI(4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于iOS:如何使用SwiftUI调整图片大小?

    我在Assets.xcassets中拥有很大的形象。 如何使用SwiftUI调整图像大小以缩小图像? 我试图设置框架,但不起作用: 1 2 Image(room.thumbnailImage)     .frame(width: 32.0, height: 32.0) 在Image上应用任何大小修改之前,应使用.resizable()。 1 2 Image(room.thumbnailImage).resizable() .frame(width: 32.0, height: 3

    2024年02月05日
    浏览(31)
  • 在 iOS 16 中用 SwiftUI Charts 创建一个折线图

    苹果在 WWDC 2022 上推出了 SwiftUI 图表,这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式,而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线图。此外,自定义图表的外观和感觉

    2024年02月01日
    浏览(37)
  • SwiftUI适配iOS16导航控制器引起的闪退

    当时iPhone14系列手机升级到iOS16.5.1系统以后,当用户登录后再次退出登录闪退货登录后退出登录闪退。 由于SwiftUI提倡用struct代替类,导致悲剧产生,闪退时无法打印是那个结构体(class类实现时会打印类名),因为是struct也没有deinit跟踪内存是否泄漏。开启僵尸进程打印只有

    2024年02月11日
    浏览(46)
  • 如何将自定义字体添加到 iOS 应用程序(SwiftUI + 得意黑)

    Xcode Version 14.3 (14E222b) SwiftUI 得意黑 Smiley Sans https://github.com/atelier-anchor/smiley-sans/releases https://sarunw.com/posts/how-to-add-custom-fonts-to-ios-app/ 熊猫小账本 一个简洁的记账 App,用于记录日常消费开支收入,使用 iCloud 保存同步数据。 支持备注,自定义时间偶尔忘记记账也没关系。 搜索

    2024年02月13日
    浏览(47)
  • SwiftUI 5.0(iOS 17)TipKit 让用户更懂你的 App

    作为我们秃头开发者来说,写出一款创意炸裂的 App 还不足以吸引用户眼球,更重要的是如何让用户用最短的时间掌握我们 App 的使用技巧。 从 iOS 17 开始, 推出了全新的 TipKit 框架专注于此事。有了它,我们再也不用自己写 App 用户帮助以及使用指南的逻辑和界面了。 使用

    2024年02月09日
    浏览(26)
  • SwiftUI 实现一个 iOS 上 Files App 兼容的文件资源管理器

    在 SwiftUI 中自己白手起家写一个 iOS(或iPadOS)上迷你的文件资源管理器是有些难度滴,不过从 iOS 11 (2017年) 官方引入自家的 Files App 之后,我们就可以借助它的魔力轻松完成这一个功能了。 如上所示,我们使用 SwiftUI 原生功能完成了一个小巧的 iOS Files App 文件管理器,

    2024年02月10日
    浏览(38)
  • iOS 17(SwiftUI 5.0)带来的图表(Charts)新类型:“大饼”与“甜甜圈”

    WWDC 2023 为我们带来了 iOS 17,也为我们带来了 SwiftUI 5.0。 在 SwiftUI 新版中,Apple 增加了很多重磅功能,也对原有功能做了大幅度升级。 对于 Charts 框架, 新增了饼图(Pie)类型并且加入了图表元素的原生选择功能。 在本篇博文中,就让我们一起来看看 SwiftUI 5.0 中这些激动

    2024年02月08日
    浏览(39)
  • SwiftUI 视频教程之 快速播放本地视频,URL 播放视频,自动播放视频,视频结束通知VideoPlayer (iOS 14 +)

    iOS 14引入了viewAVKit的世界。显示实例的内容。在框架内部定义,让我们可以在本地播放视频,而无需从.SwiftUIVideoPlayerVideoPlayerAVPlayerViewAVKitSwiftUIUIKit VideoPlayer以 player 作为初始化参数,是 AVPlayer 的一个实例。 通过 URL 播放视频 带叠加层的视频播放器 自动播放视频 视频结束通

    2024年02月06日
    浏览(102)
  • 万物皆可长按:SwiftUI 5.0(iOS 17)极简原生实现任意视图长按惯性加速功能

    在 SwiftUI 中与视图进行各种花样交互是 App 具有良好体验不可或缺的一环。 比如,我们希望按钮能在用户长按后产生惯性加速度行为,并想把这一行为扩展到 SwiftUI 中的任意视图中去。 以前,要想实现任意视图的长按加速,我们需要自己写额外代码,费时又费力。 不过,从

    2024年02月13日
    浏览(30)
  • 【SwiftUI模块】0060、SwiftUI基于Firebase搭建一个类似InstagramApp 2/7部分-搭建TabBar

    SwiftUI模块系列 - 已更新60篇 SwiftUI项目 - 已更新5个项目 往期Demo源码下载 技术:SwiftUI、SwiftUI4.0、Instagram、Firebase 运行环境: SwiftUI4.0 + Xcode14 + MacOS12.6 + iPhone Simulator iPhone 14 Pro Max 使用SwiftUI基于Firebase搭建一个类似InstagramApp 2/7部分-搭建TabBar - 效果 一、运行效果 二、项目结构图

    2024年02月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包