谁说程序员不懂浪漫,教你使用SwiftUI搭建一个电子相册送给她吧~

简介: 谁说程序员不懂浪漫,教你使用SwiftUI搭建一个电子相册送给她吧~

谁说程序员不懂浪漫,教你使用SwiftUI搭建一个电子相册送给她吧~


项目背景

每到七夕情人节、纪念日等节日,身为程序员的我们总是不知道该送什么礼物表达心意,毕竟满脑子装的都是代码

那我们能不能用代码做一个礼物送给心爱的那个她呢?

即能表达心意,又刚好碰上自己的专业领域。

说干就干。

项目搭建

首先,创建一个新的SwiftUI项目,命名为ElectronicAlbum

image.png

素材导入

首先,我们需要导入一堆图片作为展示的素材。我们在Assets.xcassets文件中导入一批图片,示例:

image.png

数据模型

素材导入完成后,接下来我们创建数据模型,我们新增一个Swift文件,命名为Model.swift

import SwiftUI
struct Model:Identifiable {
    var id = UUID()
    var imageName: String
}
//示例数据
var models = (1...6).map { Model(imageName:"\($0)") }

上述代码中,我们声明了一个结构体Model,遵循Identifiable协议。

Model结构体中,我们声明了一个id作为唯一标识符,然后声明了一个变量imageName用来关联图片。

在之前我们已经导入了一批图片,并且图片名称为1~6,因此我们可以声明一个数组models,通过map创建示例数据。

页面样式

我们回到ContentView.swift文件,创建一个新视图来展示图片。示例:

// 图片视图
func imageCardView() -> some View {
    ForEach(models) { item in
            Image(item.imageName)
                .resizable()
                .aspectRatio(contentMode: .fit)
                .cornerRadius(10)
                .padding(.horizontal)
                .shadow(color: .pink, radius: 5, x: 0, y: 0)
    }
}

image.png

上述代码中,我们创建了一个新视图imageCardView

imageCardView视图中,我们使用ForEach循环遍历models数组中的数据,并赋值给Image图片。

图片样式部分,我们保持图片原有aspectRatio宽高比,加个cornerRadius圆角,设置横向padding边距,最后加了加了一个粉色的边框。

基础交互

页面样式完成后,我们需要左右滚动图片视图,可以使用到TabView,示例:

var body: some View {
    TabView {
        imageCardView()
    }
    .tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
    .background(Color(red: 254 / 255, green: 207 / 255, blue: 238 / 255)).edgesIgnoringSafeArea(.all)
}

上述代码中,我们在ContentView视图中使用TabView构建了一个轮博视图。

我们设置了PageTabViewStyle样式为隐藏轮播小圆点,然后设置了背景颜色为粉色。

我们预览下效果:

image.png

交互进阶

基础交互我们完成基础的轮播图样式,下一步为了让交互更加优雅些,我们可以尝试使用加入些3D切换的效果。

3D切换效果我们需要使用到rotation3DEffect修饰符,而由于rotation3DEffect旋转角度接收Double类型的数值,但我们视图偏移修饰符接收的数值却是CGFloat类型,因此我们首先声明一个方法进行类型转换和设置旋转交互的角度。

func getAngle(xOffset: CGFloat) -> Double {
    let tempAngle = xOffset / (UIScreen.main.bounds.width / 2)
    let rotationDegree: CGFloat = 30
    return Double(tempAngle * rotationDegree)
}

上述代码中,我们声明了一个方法getAngle,接收一个CGFloat类型的参数xOffset,返回一个Double类型的参数。

因为我们需要把每个视图展示在中间,因此视图切换角度tempAngle为屏幕一半来计算角度,然后我们提供旋转角度为30度,最后返回计算好的旋转角度。

我们将rotation3DEffect修饰符加到视图中。

// 图片视图
func imageCardView() -> some View {
    ForEach(models) { item in
        GeometryReader { innerView in
            Image(item.imageName)
                .resizable()
                .aspectRatio(contentMode: .fit)
                .cornerRadius(10)
                .padding(.horizontal)
                .shadow(color: .pink, radius: 5, x: 0, y: 0)
                .frame(width: innerView.frame(in: .global).width, height: innerView.frame(in: .global).height)
                .rotation3DEffect(Angle(degrees: getAngle(xOffset: innerView.frame(in: .global).minX)),
                                  axis: (x: 0.0, y: 1.0, z: 0.0),
                                  anchor: innerView.frame(in: .global).minX > 0 ? .leading : .trailing,
                                  perspective: 2.5
                )
        }
    }
}

我们使用GeometryReader几何视图来确定图片滚动时的图片的大小,然后使用frame修饰符调整其滚动时的图片大小变化,最后使用rotation3DEffect修饰符,设置滚动时的角度变化。

项目预览

image.png

恭喜你,完成了整个项目的全部内容!

快来动手试试吧。

相关文章
|
前端开发 安全 程序员
【程序员交友】祈澈姑娘:假装文艺与代码齐飞的前端妹子
【程序员交友】祈澈姑娘:假装文艺与代码齐飞的前端妹子
67 0
|
6月前
|
移动开发 前端开发 JavaScript
童年回忆——开心消消乐(内含源码inscode一键运行)
童年回忆——开心消消乐(内含源码inscode一键运行)
|
12天前
|
前端开发 JavaScript UED
惊呆了!这些前端技巧竟然能让你的网站秒变高大上,赶快学起来!
前端技术是网页设计的核心,能够显著提升用户体验和网站竞争力。本文介绍了三种实用的前端技巧:动态背景效果、微交互设计和响应式设计。通过CSS动画和JavaScript,可以实现视觉吸引的动态背景;微交互设计如按钮点击效果能增强用户参与感;响应式设计则确保网站在不同设备上呈现良好效果。这些技巧简单易学,效果显著,值得尝试。
24 3
|
6月前
|
前端开发 JavaScript 搜索推荐
专业与传统相融,程序员特有祝福:通过前端代码送上新春祝福
新春佳节即将来临,忙了一年,作为程序员,当然要用属于程序员独有的方式来给大家送上新春祝福。在这个喜庆的时刻,让我们以技术的视角来送上一份特别的新春祝福,作为程序员,我们可以用代码和技术,为了大家带来一份独特而有趣的祝福,为了给节日增添一份属于技术人特有的魅力,以前端开发的视角来送上一份特别的新春祝福。作为前端开发者,通过编写前端代码可以创造出丰富多样的视觉效果,可以利用HTML、CSS和JavaScript等编写代码来呈现出直观的新春祝福效果,为大家呈现出生动直观的新春祝福。那么本文以前端程序员的视角,结合前端专业知识送上新春祝福,希望在新的一年里,大家的生活充满幸福和技术的收获。
87 1
专业与传统相融,程序员特有祝福:通过前端代码送上新春祝福
|
6月前
|
JavaScript 前端开发 Java
程序员在七夕如何用各大编程语言写浪漫情书呢?
程序员在七夕如何用各大编程语言写浪漫情书呢?
76 6
|
JavaScript 前端开发 小程序
程序员过中秋的一百种方式#
程序员过中秋的正确方式:团圆、赏月、还是惨兮兮地加班? 赏月 明月几时有,把酒问青天
205 0
程序员过中秋的一百种方式#
技术总监亲自上阵,手撸了一门编程语言,同事直呼哇塞
都说程序员的三大浪漫是:操作系统、编译原理、图形学;但图形学确实是特定的专业领域,我们几乎接触不到,所以对我来说换成网络更合适一些,最后再加上一个数据库。 这四项技术如果都能掌握的话,可以在 IT 行业横着走了,加上这几年互联网行业越来越不景气,越底层的技术就越不可能被替代;所以为了给自己的 30+ 危机留点出路,从今年上半年开始我就逐渐开始从头学习编译原理。 功夫不负有心人,经过近一个月的挑灯夜战,每晚都在老婆的催促下才休息,克服了中途好几次想放弃的冲动,终于现在完成了 GScript 一个预览版。 预览版的意思是语法结构与整体设计基本完成,后续更新也不太会改动这部分内容、但还缺少一些易用功
|
前端开发 程序员
来自程序员的浪漫圣诞&纯CSS3打造的圣诞祝福【献给前端初学者】内附代码以及运行方法
来自程序员的浪漫圣诞&纯CSS3打造的圣诞祝福【献给前端初学者】内附代码以及运行方法
来自程序员的浪漫圣诞&纯CSS3打造的圣诞祝福【献给前端初学者】内附代码以及运行方法
|
存储 JavaScript 安全
妈妈,我要做游戏, 一文告诉你怎么入行游戏开发
经常在csdn 上看到我用java 做了什么游戏,我用python做了什么游戏,而且很多人阅读,我只想说你们都是弟弟,都是外行,你们写的那张根本就不是游戏行业的生产方式,连个玩具都不算,自嗨还行,没有一点专业性,专业的还是要看我的,正儿八经的做游戏的。
240 0
妈妈,我要做游戏, 一文告诉你怎么入行游戏开发
|
前端开发 UED
【青训营】- 前端只是切图仔?来学学给开发人看的UI设计(下)
于开发人来说,不单单要会写代码,有良好的用户体验思想也是非常重要的。毕竟,开发完的内容是要给用户来使用的,而不是自己随心所欲觉得哪里想添加个内容就哪里添加。 因此呢,在下面的这篇文章中,将学习给开发人看的 UI 设计。一起来了解吧~
【青训营】- 前端只是切图仔?来学学给开发人看的UI设计(下)
下一篇
无影云桌面