| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> SwiftUI 使用SwiftUI实现跑马灯效果 Marquee -> 正文阅读 |
|
[移动开发]SwiftUI 使用SwiftUI实现跑马灯效果 Marquee |
OC类型的demo很多 这里就不提了? 直接上代码吧 public struct MarqueeText : View { ? ? public var text = "" ? ? public var font: UIFont ? ? public var leftFade: CGFloat ? ? public var rightFade: CGFloat ? ? public var startDelay: Double ? ? @State private var animate = false ? ? public var body : some View { ? ? ? ? let stringWidth = text.getWidthOfString(usingFont: font) ? ? ? ? let stringHeight = text.heightOfString(usingFont: font) ? ? ? ? return ZStack { ? ? ? ? ? ? GeometryReader { geometry in ? ? ? ? ? ? ? ? Group { ? ? ? ? ? ? ? ? ? ? Text(self.text).lineLimit(1) ? ? ? ? ? ? ? ? ? ? ? ? .font(.init(font)) ? ? ? ? ? ? ? ? ? ? ? ? .offset(x: self.animate ? -stringWidth - stringHeight * 2 : 0) ? ? ? ? ? ? ? ? ? ? ? ? .animation(Animation.linear(duration: Double(stringWidth) / 30).delay(startDelay).repeatForever(autoreverses: false) ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ? ? ? ? ? ? ? ? .onAppear() { ? ? ? ? ? ? ? ? ? ? ? ? ? ? if geometry.size.width < stringWidth { ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? self.animate = true ? ? ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? ? ? ? ? .fixedSize(horizontal: true, vertical: false) ? ? ? ? ? ? ? ? ? ? ? ? .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading) ? ? ? ? ? ? ? ? ? ? Text(self.text).lineLimit(1) ? ? ? ? ? ? ? ? ? ? ? ? .font(.init(font)) ? ? ? ? ? ? ? ? ? ? ? ? .offset(x: self.animate ? 0 : stringWidth + stringHeight * 2) ? ? ? ? ? ? ? ? ? ? ? ? .animation(Animation.linear(duration: Double(stringWidth) / 30).delay(startDelay).repeatForever(autoreverses: false) ? ? ? ? ? ? ? ? ? ? ? ? ) ? ? ? ? ? ? ? ? ? ? ? ? .fixedSize(horizontal: true, vertical: false) ? ? ? ? ? ? ? ? ? ? ? ? .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .topLeading) ? ? ? ? ? ? ? ? }.offset(x: leftFade) ? ? ? ? ? ? ? ? .mask( ? ? ? ? ? ? ? ? ? ? HStack(spacing:0) { ? ? ? ? ? ? ? ? ? ? ? ? Rectangle() ? ? ? ? ? ? ? ? ? ? ? ? ? ? .frame(width:2) ? ? ? ? ? ? ? ? ? ? ? ? ? ? .opacity(0) ? ? ? ? ? ? ? ? ? ? ? ? LinearGradient(gradient: Gradient(colors: [Color.black.opacity(0), Color.black]), startPoint: .leading, endPoint: .trailing) ? ? ? ? ? ? ? ? ? ? ? ? ? ? .frame(width:leftFade) ? ? ? ? ? ? ? ? ? ? ? ? LinearGradient(gradient: Gradient(colors: [Color.black, Color.black]), startPoint: .leading, endPoint: .trailing) ? ? ? ? ? ? ? ? ? ? ? ? LinearGradient(gradient: Gradient(colors: [Color.black, Color.black.opacity(0)]), startPoint: .leading, endPoint: .trailing) ? ? ? ? ? ? ? ? ? ? ? ? ? ? .frame(width:rightFade) ? ? ? ? ? ? ? ? ? ? ? ? Rectangle() ? ? ? ? ? ? ? ? ? ? ? ? ? ? .frame(width:2) ? ? ? ? ? ? ? ? ? ? ? ? ? ? .opacity(0) ? ? ? ? ? ? ? ? ? ? }).frame(width: geometry.size.width + leftFade).offset(x: leftFade * -1) ? ? ? ? ? ? } ? ? ? ? }.frame(height: stringHeight) ? ? } ? ? public init(text: String, font: UIFont, leftFade: CGFloat, rightFade: CGFloat, startDelay: Double) { ? ? ? ? self.text = text ? ? ? ? self.font = font ? ? ? ? self.leftFade = leftFade ? ? ? ? self.rightFade = rightFade ? ? ? ? self.startDelay = startDelay ? ? } } extension String { ? ? func getWidthOfString(usingFont font: UIFont) -> CGFloat { ? ? ? ? let fontAttributes = [NSAttributedString.Key.font: font] ? ? ? ? let size = self.size(withAttributes: fontAttributes) ? ? ? ? return size.width ? ? } ? ? func heightOfString(usingFont font: UIFont) -> CGFloat { ? ? ? ? let fontAttributes = [NSAttributedString.Key.font: font] ? ? ? ? let size = self.size(withAttributes: fontAttributes) ? ? ? ? return size.height ? ? } } 调用的时候 //跑马灯 ? ? ? ? ? ? ? ? ? ? MarqueeText( ?? ? ? ? ? ? ? ? ? ? ? ? text: "文字文字文字文字文字文字文字文字文字文字文字文字文字文字", ?? ? ? ? ? ? ? ? ? ? ? ? font: UIFont.preferredFont(forTextStyle: .subheadline), ?? ? ? ? ? ? ? ? ? ? ? ? leftFade: 15, ?? ? ? ? ? ? ? ? ? ? ? ? rightFade: 15, ?? ? ? ? ? ? ? ? ? ? ? ? startDelay: 1) ? ? ? ? ? ? ? ? ? ? ? ? .padding(.leading,100) ? ? ? ? ? ? ? ? ? ? ? ? .padding(.trailing,100) |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:42:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |