最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用SwiftUI實(shí)現(xiàn)3D Scroll滾動效果的實(shí)現(xiàn)代碼

 更新時(shí)間:2020年04月27日 17:01:49   作者:CodingSuccess  
這篇文章主要介紹了用SwiftUI實(shí)現(xiàn)3D Scroll效果的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)

本文介紹了用SwiftUI實(shí)現(xiàn)3D Scroll效果的實(shí)現(xiàn)代碼,分享給大家,具體如下:

我們預(yù)覽下今天要實(shí)現(xiàn)的 3D scroll 效果。學(xué)完本教程后,你就可以在你的 App 中把這種 3D 效果加入任何自定義的 SwiftUI 視圖。下面我們來開始本教程的學(xué)習(xí)。

入門

首先,創(chuàng)建一個(gè)新的 SwiftUI 視圖。為了舉例說明,在這個(gè)新視圖中,我會展示一個(gè)有各種顏色的矩形列表,并把新視圖命名為 ColorList 。

import SwiftUI

struct ColorList: View {
 var body: some View {
  Text("Hello, World!")
 }
}

struct ColorList_Previews: PreviewProvider {
 static var previews: some View {
  ColorList()
 }
}

顏色數(shù)據(jù)

在視圖的結(jié)構(gòu)體里,添加一個(gè)用于記錄顏色的變量。

var colors: [Color]

實(shí)現(xiàn)這個(gè)列表

body 變量的內(nèi)部,刪除掉占位 Text 。在 ScrollView 嵌套中添加一個(gè) HStack ,如下:

var body: some View {
 ScrollView(.horizontal, showsIndicators: false) {
  HStack(alignment: .center, spacing: 50) {

  }
 }
}

展示矩形

我們使用 ForEachHStack 內(nèi)部根據(jù) colors 中的數(shù)據(jù)分別創(chuàng)建不同顏色的矩形。此外,我修改了矩形的 frame,讓它看起來與傳統(tǒng) UI 布局更像一些。

var body: some View {
 ScrollView(.horizontal, showsIndicators: false) {
  HStack(alignment: .center, spacing: 20) {
   ForEach(colors, id: \.self) { color in
    Rectangle()
     .foregroundColor(color)
     .frame(width: 200, height: 300, alignment: .center)
   }
  }
 }
}

在 Preview 結(jié)構(gòu)體中傳入如下的顏色參數(shù):

struct ColorList_Previews: PreviewProvider {
 static var previews: some View {
  ColorList(colors: [.blue, .green, .orange, .red, .gray, .pink, .yellow])
 }
}

你可以看到下圖中的效果:

增加 3D 效果

首先,把 Rectangle 嵌套在 GeometryReader 中。這樣的話,當(dāng) Rectangle 在屏幕上移動的時(shí)候,我們就可以獲得其 frame 的引用。

var body: some View {
 ScrollView(.horizontal, showsIndicators: false) {
  HStack(alignment: .center, spacing: 230) {
   ForEach(colors, id: \.self) { color in
    GeometryReader { geometry in
     Rectangle()
      .foregroundColor(color)
      .frame(width: 200, height: 300, alignment: .center)
    }
   }
  }
 }
}

根據(jù) GeometryReader 的用法要求,我們需要修改上面定義的 HStack 的 spacing 屬性。

Rectangle 中加入下面這行代碼。

.rotation3DEffect(Angle(degrees: (Double(geometry.frame(in: .global).minX) - 210) / -20), axis: (x: 0, y: 1.0, z: 0))

當(dāng) Rectangle 在屏幕上移動時(shí),這個(gè)方法的 Angle 參數(shù)會發(fā)生改變。請重點(diǎn)看 .frame(in:) 這個(gè)函數(shù),你可以獲取 RectangleCGRect 屬性 minX 變量來計(jì)算角度。

axis 參數(shù)是一個(gè)元組類型,它定義了在使用你傳入的角度參數(shù)時(shí),哪一個(gè)坐標(biāo)軸要發(fā)生改變。在本例中,是 Y 軸。

rotation3DEffect() 方法的文檔可以在蘋果官方網(wǎng)站的 這里 找到。

下一步,把這個(gè)案例跑起來。當(dāng)矩形在屏幕上移動時(shí),你可以看到它們在旋轉(zhuǎn)。

我還修改了矩形的 cornerRadius 屬性,并加上了投影效果,讓它更美觀。

最終效果

struct ColorList: View {
 
 var colors:[Color]
 
 var body: some View {
  ScrollView(.horizontal, showsIndicators: false) {
   HStack(alignment: .center, spacing: 230) {
    ForEach(colors, id: \.self) { color in
     GeometryReader { geometry in
      Rectangle()
       .foregroundColor(color)
       .frame(width: 200, height: 300, alignment: .center)
       .cornerRadius(16)
       .shadow(color: Color.black.opacity(0.2), radius: 20, x: 0, y: 0)
       .rotation3DEffect(Angle(degrees: (Double(geometry.frame(in: .global).minX) - 210) / -20), axis: (x: 0, y: 1.0, z: 0))
     }
    }
   }.padding(.horizontal, 210)
  }
 }
}

結(jié)束

到此這篇關(guān)于用SwiftUI實(shí)現(xiàn)3D Scroll效果的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)SwiftUI實(shí)現(xiàn)3D Scroll內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 升級到Swift 4.0可能遇到的坑總結(jié)

    升級到Swift 4.0可能遇到的坑總結(jié)

    這篇文章主要給大家介紹了關(guān)于升級到Swift 4.0可能遇到的坑的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用swift4具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例

    Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPr

    這篇文章主要為大家介紹了Swift高階函數(shù)contains?allSatisfy?reversed?lexicographicallyPrecedes用法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Swift心得筆記之運(yùn)算符

    Swift心得筆記之運(yùn)算符

    區(qū)別于 C 語言,在 Swift 中你可以對浮點(diǎn)數(shù)進(jìn)行取余運(yùn)算(%),Swift 還提供了 C 語言沒有的表達(dá)兩數(shù)之間的值的區(qū)間運(yùn)算符,(a..b和a...b),這方便我們表達(dá)一個(gè)區(qū)間內(nèi)的數(shù)值。
    2015-04-04
  • 詳解Swift語言中的類與結(jié)構(gòu)體

    詳解Swift語言中的類與結(jié)構(gòu)體

    這篇文章主要介紹了Swift語言中的類與結(jié)構(gòu)體,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • 快速排序算法在Swift編程中的幾種代碼實(shí)現(xiàn)示例

    快速排序算法在Swift編程中的幾種代碼實(shí)現(xiàn)示例

    快速排序是一種不穩(wěn)定的排序,存在著優(yōu)化空間,這里我們來看快速排序算法在Swift編程中的幾種代碼實(shí)現(xiàn)示例:
    2016-07-07
  • 詳解在swift中實(shí)現(xiàn)NSCoding的自動歸檔和解檔

    詳解在swift中實(shí)現(xiàn)NSCoding的自動歸檔和解檔

    本篇文章主要介紹了在swift中實(shí)現(xiàn)NSCoding的自動歸檔和解檔,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Swift協(xié)議Protocol介紹

    Swift協(xié)議Protocol介紹

    協(xié)議規(guī)定了用來實(shí)現(xiàn)某一特定功能所必需的方法和屬性。任意能夠滿足協(xié)議要求的類型被稱為遵循(conform)這個(gè)協(xié)議。類,結(jié)構(gòu)體或枚舉類型都可以遵循協(xié)議,并提供具體實(shí)現(xiàn)來完成協(xié)議定義的方法和功能
    2022-08-08
  • SpringBoot3.0集成Redis緩存的實(shí)現(xiàn)示例

    SpringBoot3.0集成Redis緩存的實(shí)現(xiàn)示例

    緩存就是一個(gè)存儲器,常用 Redis作為緩存數(shù)據(jù)庫,本文主要介紹了SpringBoot3.0集成Redis緩存的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Swift 如何讓ScrollView滾動到具體某個(gè)位置

    Swift 如何讓ScrollView滾動到具體某個(gè)位置

    這篇文章主要介紹了Swift 如何讓ScrollView滾動到具體某個(gè)位置,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Swift與Objective C的簡單對比

    Swift與Objective C的簡單對比

    很多人想學(xué)習(xí)iOS開發(fā),但是不知道如何從Objective-C和Swift之間選擇。而網(wǎng)上的一些答案,大抵說的是,以后Swift終將取代Objective-C,但是目前來講還是Objective-C比較重要。那么究竟怎樣呢,今天我們就來探討下
    2016-12-12

最新評論

铁力市| 延边| 永修县| 正宁县| 界首市| 贞丰县| 尚志市| 桃源县| 三台县| 琼结县| 瑞丽市| 临夏市| 南城县| 江陵县| 上杭县| 萍乡市| 鹤岗市| 偏关县| 顺平县| 澎湖县| 屯留县| 察哈| 垫江县| 读书| 白城市| 晋州市| 新建县| 边坝县| 天柱县| 临江市| 绥德县| 荆州市| 察雅县| 清丰县| 泉州市| 三江| 广水市| 高清| 辽阳市| 雷波县| 侯马市|