- 博客(255)
- 资源 (10)
- 收藏
- 关注
原创 手把手教你在 App Store Connect 创建订阅商品(含免费试用和优惠配置)
【iOS订阅商品配置全流程指南】本文详细介绍了在AppStoreConnect中创建订阅商品的完整步骤:从创建订阅组、添加商品ID和本地化设置,到配置价格方案、试用期和促销优惠。重点包括:订阅组命名规则、产品ID唯一性要求、家庭共享开启不可逆等注意事项,并强调首个订阅需随新版本提交审核的特殊要求。通过系统化的操作指引和常见问题提示,帮助开发者高效完成订阅商品配置,为后续测试和上线奠定基础。
2025-06-10 09:38:18
988
原创 教你在 iPhone 上添加 163 邮箱,只需两步!
摘要:本文详细介绍了在iPhone邮件App中添加163邮箱的步骤。首先根据是否首次添加选择不同入口,然后填写邮箱信息时需特别注意要使用授权码而非登录密码。文章重点讲解了获取授权码的方法:登录163邮箱网页版,在设置中开启POP3/SMTP或IMAP服务,通过手机验证后获取一次性授权码。最后验证成功并完成同步设置即可。整个过程强调使用授权码的安全性,并提醒用户及时保存授权码。
2025-06-06 18:21:50
458
2
原创 [特殊字符] 集成苹果支付,只需两步!(内购 IAP 实战指南)
本文详细介绍了使用Swift实现苹果IAP虚拟商品内购功能的完整流程。主要分为两大步骤:1)客户端发起购买请求,通过StoreKit框架配置商品ID并唤起支付面板;2)支付完成后进行验单验证,包括获取支付凭证、向苹果服务器查询订单有效性等关键操作。文章提供了可直接复用的Swift代码示例,并对订阅验证、沙盒测试等注意事项给出实用建议。通过这套方案,开发者可以稳定实现会员订阅、道具解锁等内购功能,适合从新手到有经验的Swift开发者参考。
2025-06-06 18:00:22
502
原创 iOS 16 SwiftUI 优雅跳转实践:用枚举路由和 NavigationStack 实现多页面导航
本文通过PHJumpDemo项目,展示了SwiftUI中优雅页面跳转的实现方案。采用NavigationStack和基于值的导航机制,创建RoutePage枚举统一管理跳转目标,并通过RouterHelper单例集中控制导航状态。这种架构实现了跳转逻辑集中化、状态管理抽象化和强类型参数传递,使多页面跳转变得清晰可维护。方案特别适合中小型App,能有效解决传统跳转方式导致的逻辑分散和状态混乱问题,为SwiftUI项目提供了现代化导航解决方案。
2025-06-06 09:13:44
1025
原创 iOS上传应用包错误问题 “Invalid bundle. The “UIInterfaceOrientationPortrait”“
iOS应用在上传AppStore时,若报错“Invalid bundle”并涉及UIInterfaceOrientation配置问题,通常与iPad多任务支持相关。自iPadOS13起,系统要求支持多任务的应用必须在Info.plist中声明四种界面方向(包括倒置竖屏)。解决方案分两种:若仅适配iPhone,可移除iPad支持;若需支持iPad,则须补全全部方向配置。开发时应注意严格区分设备平台配置,并使用最新Xcode进行验证。本文解析了该报错的成因,并提供了具体的修复方案。
2025-06-04 17:57:29
1117
1
原创 SwiftUI 数据绑定与视图更新(@State、@ObservedObject、@EnvironmentObject)
SwiftUI中的状态管理:三种核心数据绑定方式解析 SwiftUI采用声明式UI编程模式,通过状态驱动视图更新。本文通过构建个人中心页面的实际案例,解析三种核心状态管理方式:1) @State用于管理局部视图状态(如金币显示开关);2) @ObservedObject监听外部数据模型变化(如用户昵称和金币数量);3) @EnvironmentObject实现跨页面全局状态共享(如路由跳转)。文章详细对比了三者的生命周期、适用范围和使用方式,并指出:@State适合视图内部简单状态,@ObservedObj
2025-06-04 09:23:38
1037
2
原创 苹果支付(iOS内购)流程简介及漏单处理(非常清楚嗷)
在集成Apple的StoreKit框架进行应用内购(IAP)时,开发者常忽视支付流程中的异常情况,如网络波动、App崩溃等,这些可能导致“漏单”问题,即用户支付成功但未收到商品。为避免此类问题,需设计完整的漏单处理机制。典型的支付流程包括创建订单、发起支付、获取收据、验单和发放商品。漏单的常见原因包括App强退、网络异常、收据未持久化、服务端验单逻辑不完善等。客户端应对漏单的策略包括检查未完成支付流程的订单和检查已完成支付但收据未上传的情况,通过本地缓存和自动补单机制确保支付流程的闭环。开发中应坚持交易收据
2025-05-23 09:24:34
980
6
原创 iOS集成友盟分享非官方文档(微信)
文章介绍了在iOS项目中集成友盟(UMeng)微信分享功能的详细步骤,并分享了作者在实际操作中遇到的问题及解决方案。首先,开发者需要在友盟后台注册应用并获取Appkey,然后通过Cocoapods集成UMShare SDK及其依赖库。接着,配置微信开放平台的应用信息,并在项目中设置SSO白名单和URLScheme。初始化设置包括基础组件和分享组件的初始化,以及处理系统回调。文章还提供了分享功能的实现代码,并指出可能遇到的问题,如微信无法唤起或分享失败,建议通过微信的API进行排查。最后,作者提供了一个Dem
2025-05-20 18:26:03
792
2
原创 (十三)深入了解AVFoundation-采集:视频帧采集与实时滤镜处理
本文介绍了在移动应用中实现实时视频处理的技术,重点讲解了如何使用AVCaptureVideoDataOutput获取原始视频帧,并结合CoreImage或Metal实现滤镜、美颜等实时图像处理效果。文章详细描述了视频采集的配置流程,包括创建AVCaptureSession、添加输入设备和输出对象,并展示了如何通过AVCaptureVideoDataOutput逐帧处理视频数据。此外,文章还提供了一个实时美颜相机的示例,演示了从视频采集到图像处理与渲染的完整流程。最后,文章指出CoreImage虽然易于使用,
2025-05-20 10:13:45
1141
1
原创 (十二)深入了解AVFoundation-采集:人脸识别与元数据处理
本篇我们聚焦于 AVFoundation 中人脸识别的实现方式,从元数据输出类型的设置出发,详细讲解了识别流程、坐标转换,以及如何支持多人识别与人脸框绘制。借助系统提供的 AVMetadataFaceObject,我们可以较为轻松地将摄像头中的面孔在界面上实时呈现,为人脸相关的 UI 效果打下基础。尽管 AVFoundation 的人脸识别功能较为基础,但对于实时展示、面部 UI 跟随等需求已经足够。
2025-05-08 09:41:26
719
4
原创 (十一)深入了解AVFoundation-采集:二维码识别
通过 AVFoundation 提供的强大接口,我们实现了从摄像头获取图像数据、检测二维码、并在界面中高亮显示二维码区域的完整流程。借助 AVCaptureMetadataOutput,我们不仅可以获取二维码的内容,还可以准确绘制其在预览画面中的位置,为用户提供清晰直观的视觉反馈。添加二维码类型过滤(如限制为 URL 或特定格式);使用四角坐标绘制更准确的多边形边框;加入识别成功后的提示音或震动反馈;自动跳转到二维码链接页面,或对内容进行分类处理;配合视野限定、对焦优化,提升扫码效率。
2025-05-06 17:26:30
946
2
原创 (十)深入了解AVFoundation-采集:录制视频功能的实现
在本篇中,我们详细介绍了如何在 iOS 中实现高清视频与音频的录制。从配置 AVCaptureSession 和添加输入输出设备,到设置视频和音频的录制输出,我们逐步完成了录制会话的初始化和控制。特别是在开始与停止录制部分,我们展示了如何通过 AVCaptureMovieFileOutput 控制录制的启动与停止,并通过代理方法处理录制完成后的文件。接下来,你可以根据项目需求进一步优化视频录制体验,例如添加实时预览、录制过程中动态调整质量,或者对录制的文件进行后期处理(如视频编辑、转码等)。
2025-05-06 09:25:52
728
1
原创 (九)深入了解AVFoundation-采集:拍照 摄像头切换、拍照参数和照片数据EXIF 信息
本文围绕 AVFoundation 的拍照能力进行了进阶实践,包括:摄像头切换实现:通过灵活切换前后摄像头,提升用户使用自由度;拍照参数配置:涵盖分辨率、闪光灯、HDR 等设置,实现更丰富的拍照效果;获取照片数据与 EXIF 信息:掌握图像数据的保存与元信息提取,构建后续图像处理和展示的基础。这些功能构成了一套可扩展、可自定义的 iOS 拍照模块核心,对于有定制拍照需求的 App 开发者来说,是一个值得掌握的基础能力。
2025-04-25 09:33:19
974
1
原创 (八)深入了解AVFoundation-采集:拍照功能的实现
在本篇中,我们基于 AVFoundation 框架,搭建了一个基本的拍照功能实现流程:包括配置 AVCaptureSession、添加 AVCaptureDeviceInput 和 AVCapturePhotoOutput、设置预览视图 PHPreviewView,并通过 AVCapturePhotoCaptureDelegate 拿到照片数据,为后续保存、展示、处理照片打下了基础。在正式使用相机功能之前,务必进行权限申请和检测。
2025-04-24 19:07:03
1331
原创 2025 Charles 抓包工具完整教程:安装、证书配置与手机抓包实战
通过以上步骤,我们完成了 Charles 的安装、证书配置以及手机端的抓包环境搭建,能够成功拦截和查看移动端的 HTTPS 请求内容。这对于开发者来说,是定位接口问题、验证请求参数、分析第三方 SDK 网络行为的重要工具。当然,在实际使用中,也可能会遇到一些抓包失败的情况,下面列出几个常见问题及排查建议抓不到包 / 手机不通检查手机和电脑是否处于同一 Wi-Fi 网络确认手机端的代理地址和端口是否正确设置Charles 是否开启了代理(Proxy → Start Recording)
2025-04-24 10:13:19
1262
原创 (七)深入了解AVFoundation-采集:采集系统架构与 AVCaptureSession 全面梳理
在本篇内容中,我们从整体视角出发,完整梳理了为核心的采集系统,包括它的职责、输入输出模型,以及如何搭建一条基本的采集链条。同时也深入探讨了 preset 设置、连接管理 和 线程注意事项 等关键细节,帮助你在实际项目中少踩坑。可以看到,AVFoundation 的采集体系虽然灵活强大,但也有一定的复杂度。理解 Session 是怎么组织 Input 和 Output 的,掌握 Connection 上的各种参数调优,才能真正驾驭底层采集系统。
2025-04-21 16:24:20
877
4
原创 AI助理iOS开发:Copilot for Xcode 下载与安装全指南
虽然 Copilot for Xcode 还不是一个完美无瑕的工具,但作为日常开发的“副驾”,它已经给我带来了不少惊喜和便利。尤其是在写一些重复逻辑、接口封装,甚至 SwiftUI 视图结构时,它总能“猜中”我想做的事情,大大减少了思维切换和敲键盘的时间。如果你是 iOS 开发者,或者正在使用 Xcode 编写 Swift/Objective-C 项目,不妨试试看这个 AI 助理,说不定能在某个深夜的 debug 时刻,给你意想不到的灵感。
2025-04-21 09:23:44
1729
1
原创 提效90%?用AI一键将 Objective-C UI 转换为 Swift,太香了!
可以看见借助AI原本需要耗费大量时间和精力的重复性工作,现在只需一个合适的 prompt,几分钟内就能完成大部分内容,甚至还能带来结构更清晰、风格更现代的代码产出。当然,AI 并不能代替我们思考,但它已经可以成为我们开发过程中的“副驾驶”——
2025-04-12 16:19:28
662
2
原创 (六)深入了解AVFoundation-播放:AirPlay、画中画后台播放
在我们之前的博客中,我们已经详细探讨了 AVPlayer 的基础播放功能,包括播放、暂停、进度拖拽、播放速度调整,以及字幕和音轨切换等常见需求。这些基本功能已经能够满足大多数视频播放场景的需求,但为了进一步提升用户体验,iOS 还提供了一些更为高级的播放功能。在本篇博客中,我们将深入探讨两项 AVPlayer 的进阶功能:AirPlay 投屏播放以及画中画(PiP)模式支持。
2025-04-12 13:43:58
923
1
原创 (五)深入了解AVFoundation-播放:多音轨、字幕、倍速播放与横竖屏切换
•多音轨切换,让用户能够自由选择不同的音频语言轨道;•字幕管理,通过 AVPlayerItemLegibleOutput 实现动态字幕展示及切换;•倍速播放,支持快进、慢放等播放速度的调整;•横竖屏切换,通过自定义按钮实现视频播放器的方向控制。这些功能的实现让我们的播放器更加智能和灵活,也提高了用户的观看体验。通过这些扩展,你可以构建出一个功能完备的本地视频播放器,满足更复杂的播放需求。
2025-04-10 17:09:44
1290
原创 (四)深入理解AVFoundation-播放:高度自定义视频播放器 UI
PHPlayerInfoView:视频信息和返回按钮。PHPlayerControlView:视频的自定义播放组件UI。而这两部分,我们选择一个专门的视图 PHPlayerOverlayView 用来承载,与播放画面的视图完全隔离。整个结构如下图所示:/// 视频信息/// 控制视图// 视频信息// 添加控制视图// 视频信息// 控制视图....
2025-04-10 09:49:19
664
原创 (三)深入了解AVFoundation-播放:AVPlayer 进阶 播放状态 & 进度监听全解析
通过对 AVPlayerItem 和 AVPlayer 的5个关键点监听,我们可以全面掌控视频的播放状态,根据这些状态和数据,我们可以进行UI的视觉反馈,反馈给用户,从而提升播放体验。本篇博客还是实现了 PHPlayerController 播放管理器,为后序的播放器博客内容打下基础。
2025-04-07 09:17:34
1182
2
原创 (二) 深入了解AVFoundation - 播放:AVFoundation 播放基础入门
本篇文章介绍了如何使用 AVFoundation 进行视频播放,包括核心类的解析、本地与网络视频播放示例,以及播放控制功能。AVFoundation 提供了丰富的 API,开发者可以基于这些基础功能进一步拓展,如添加播放进度监听、全屏播放、倍速播放等功能,打造更完善的播放器体验。
2025-03-28 18:56:08
1211
2
原创 (一)深入了解AVFoundation:框架概述与核心模块解析
AVFoundation是Apple提供的功能强大的音视频处理框架,它几乎涵盖了iOS开发中所有与音视频相关的需求。从播放、采集到编辑,每个模块都有丰富的API和灵活的扩展能力,能够满足从基础到高级的开发需求。在接下来的系列文章中,我们将深入解析AVFoundation的各个核心模块,结合实际项目中的应用场景,帮助你不仅掌握基础知识,还能积累宝贵的实战经验。
2025-03-28 14:52:54
1218
2
原创 iOS苹果审核:Guideline 2.1 - Information Needed
Guideline 2.1 - Information Needed 的问题通常发生在开发者提交的应用中缺乏足够的关键信息或者功能不完整。它的原文如下:根据原文,苹果审核要求开发者提供完整的应用信息,以便审核团队能够清楚了解应用的功能。完整的应用功能说明:包括必要的登录凭证、用户操作流程和关键功能的演示,如果以视频形式提供了这一步,会让审核人员感觉到非常友好。测试账号:对于需要用户账户的应用,开发者需要提供演示账号,并清楚地说明账号的使用方式。
2025-03-26 09:42:19
1197
2
原创 iOS苹果审核:Guideline 5.1.1(v) - Data Collection and Storage
通过本次解决Guideline 5.1.1(v) - Data Collection and Storage 审核问题,我们可以看出,苹果对于数据管理的要求非常严格。尤其是对于涉及用户账户创建的应用,必须提供完整的账号删除功能,不能仅仅停留在“禁用”或“暂时停用”层面。苹果的审核不仅要求提供账号删除入口,还要求该功能必须易于访问,并且清晰可见。对于开发者来说,遇到类似的问题时,我们不仅要遵循苹果的要求,还要注意设备适配和审核过程中的细节。
2025-03-25 18:57:50
957
原创 Android UI 组件系列(三):ImageView 使用技巧与图像加载
在本篇博客中,我们详细探讨了 ImageView 作为 Android 开发中常用的 UI 组件的基本用法和一些常见的使用技巧。通过介绍 ImageView 的常用属性、如何加载网络图片、以及如何实现图片的圆角和裁剪效果,我们展示了如何充分利用 Glide 这样的强大库来优化图片加载和处理过程。
2025-03-25 09:54:06
1677
原创 Android UI 组件系列(二):Button 进阶用法
在这篇博客中,我们深入探讨了 Button 的进阶用法,重点介绍了如何通过 事件处理 来响应用户的操作,如何使用 自定义样式 来提升按钮的外观,并利用 StateListDrawable 来管理按钮在不同状态下的表现。这些技巧能够帮助你打造更具交互性、视觉吸引力和动态响应的按钮,提升用户体验。
2025-03-14 19:40:42
1333
7
原创 Android UI 组件系列(二):Button 使用详解与常见属性
到这里,我们已经初步了解了 Button 的作用、基本用法以及常见的属性配置。作为 Android 中最常用的 UI 元素之一,Button 不仅能帮助我们实现交互功能,还可以通过不同的样式和属性进行定制,以满足设计需求。无论是调整文本、背景颜色,还是处理点击事件,Button都能提供灵活的方式来增强用户体验。接下来,我们还会进一步探索 Button 的进阶用法,包括自定义样式、按钮状态管理、与其他 UI 元素的配合等内容。
2025-03-12 18:46:06
1260
2
原创 Android UI 组件系列(一):TextView 使用详解与常见属性
TextView 是 Android 开发中非常常用的 UI 组件,它不仅支持基本的文本显示,还提供了许多强大的功能和灵活的自定义选项。从简单的文本设置到图文混排、字体样式、阴影效果、富文本、HTML 渲染等,TextView 都能够满足大多数界面展示需求。掌握 TextView 的常见属性和高级特性,可以帮助开发者更加高效地设计和实现复杂的用户界面,使应用界面更加丰富和多样化。
2025-03-12 09:05:15
1307
1
原创 iOS中的设计模式(八)- 桥接模式
桥接模式的目的是把抽象层次结构从其实现中分离出来,使其能够独立变更。抽象层次定义了供客户端使用的上层的抽象接口。实现层次结构定义了供抽象层次使用的底层接口。实现类的引用被封装与抽象层的实例中是,桥接就形成了。Abstraction 定义了供其它类调用的上层抽象接口的父接口,它有一个对Implementor实例的引用imp。Implementor定义了实现类的接口。这个接口不比跟Abstraction的接口一致,其实两个接口可以完全没有关系。
2025-03-11 20:06:07
1274
原创 iOS 苹果支付内购开发指南:创建 Apple 支付商品的完整流程
Apple 支付商品的创建流程看似繁琐,但只要掌握了步骤,其实并不复杂。从前期的准备工作,到在 App Store Connect 中配置商品,再到最后的测试,每一步都关系着内购功能是否顺利上线。建议在开发初期就尽早完成商品的创建与审核,避免在上线前因商品状态问题而耽误进度。如果你在商品创建过程中遇到什么问题,也欢迎留言交流!
2025-03-11 09:45:44
3411
10
原创 iOS中的设计模式(七)- 适配器模式
适配器模式,可以这么说,用于连接两种不同种类的对象,使其毫无问题地协同工作,有时候也称之为“包装器”(wrapper)。其思想相当简单。适配器实现客户端所需的某种接口的行为。同时,它又连接到另一个具有(完全)不同接口与行为的对象。一边是客户端懂得如何使用的目标接口,另一边是客户端一无所知的被适配者,适配器在这两者之间。适配器的主要作用是把被适配者的行为传递给管道另一端的客户端。
2025-03-10 18:17:52
696
1
原创 Android布局系列(六):TableLayout 表格布局的使用
通过这篇博客,我们了解了如何使用 TableLayout 来构建一个简单而清晰的登录页面。TableLayout 为我们提供了一种按行列方式排列控件的便捷方法,使得界面布局更加整洁,且易于管理。无论是在简单的表单界面,还是在需要精确对齐的复杂布局中,TableLayout 都能够发挥出色的作用。掌握了 TableLayout 的使用技巧后,您可以在 Android 开发中更高效地处理各种 UI 布局需求。
2025-03-10 09:28:15
1262
1
原创 Android 布局系列(五):GridLayout 网格布局的使用
通过这次实现,我们展示了如何利用 GridLayout 布局来创建一个简单而实用的计算器界面。GridLayout 提供了灵活的网格系统,让我们能够轻松地安排和对齐每个按钮,确保布局既美观又符合用户的操作习惯。虽然我们实现的只是一个基础的计算器界面,但通过这种布局方式,开发者可以进一步扩展功能,比如添加更多的操作符、实现历史记录、支持更多复杂的计算等。总的来说,GridLayout 是一个功能强大的布局工具,在很多需要精确对齐和分布的场景下都能大显身手。
2025-02-28 09:23:52
2495
4
原创 Android 布局系列(四):ConstraintLayout 使用指南
ConstraintLayout 是 Android 官方推出的一种布局方式,旨在简化和优化复杂界面的布局设计。它首次出现在 Android 2016 年的 I/O 大会上,并迅速成为了开发者的首选布局工具。ConstraintLayout 的最大特点是它不需要过多的嵌套布局,通过约束关系(constraints)直接控制视图的位置和大小,从而避免了传统布局中可能出现的性能瓶颈。
2025-02-27 19:31:13
1992
5
原创 iOS中的设计模式(六)- 单利模式
单例模式(Singleton Pattern)是一种设计模式,旨在保证一个类只有一个实例,并提供全局访问点。它属于创建型设计模式,通常用于需要共享资源的场景中,以避免多个对象的重复创建和不必要的资源浪费。单例模式的核心思想是:一个类在系统的生命周期内,只能有一个实例,并且该实例应该被所有的类共享。为了保证只有一个实例,单例模式通过控制实例化过程来确保类的唯一性。通常,单例类会提供一个静态的访问方法(例如shared或),通过这个方法获取唯一实例。
2025-02-27 08:59:56
1217
2
原创 Android 布局系列(三):RelativeLayout 使用指南
通过本次示例,我们可以看到,虽然使用 RelativeLayout 来实现一个“上下左右”布局并不难,但要达到精确的对齐效果,我们需要理解并熟练运用 RelativeLayout 中的各种布局属性。掌握这些属性的使用,能够让我们在设计布局时更加灵活和高效。当然,随着布局需求的复杂化,灵活使用这些属性是提高开发效率的关键。只要多加练习,并根据实际需求进行调整,你将能快速实现各种复杂的布局效果。布局的设计不仅仅是对技术的掌握,更是对细节的关注。
2025-02-25 19:40:36
2298
5
原创 Android 布局系列(二):FrameLayout 布局的应用
FrameLayout 是安卓中一个非常基础的布局容器,它的设计目标是简单且高效。它允许我们将多个视图堆叠在一起,所有的子视图都默认居中对齐,并且后添加的视图会覆盖在前面的视图之上。FrameLayout 的主要作用是让视图叠加,并没有复杂的布局管理功能,因此在某些简单的界面场景下,它提供了一个高效且直观的解决方案。常见的应用场景包括显示全屏图片、视频播放器界面以及实现视图切换等。虽然 FrameLayout 是安卓布局中最基础的容器之一,但它在某些特定的场景下依然非常实用。
2025-02-25 09:33:58
1619
6
原创 SwiftUI(二十二)- SwiftUI 实现多页面应用 TabView和自定义底部导航
TabView 是SwiftUI中用于创建底部导航栏的容器视图,它允许我们在多个视图之间切换,并提供了一种非常简答的方式来管理不同的页面。与UIKit中的UITabBarController类似,TabView可以帮助开发者快速构建多页面应用的基础架构。TabView的语法非常简单,使用.tabItem() 修饰符即可实现页面切换和TabBar的管理,不需要编写复杂的控制器逻辑。TabView会自动处理选中和取消状态,我们只需要关注每个tab中药显示的内容。
2025-02-24 17:50:54
2015
2
iOS智能自适应输入框组件库
2024-07-16
【算法速成宝典】- 排序算法大揭秘:快速排序实战详解+实战题目库(积分解锁)
2024-07-10
iOS 16 SwiftUI 优雅跳转实践:用枚举路由和 NavigationStack 实现多页面导航
2025-06-06
iOS文字滚动:使用CATextLayer实现的跑马灯
2025-02-05
OS开发书籍推荐 - 《iOS CORE ANIMATION》核心动画高级
2025-01-26
SwiftUI学习推荐书籍《SWIFTUI BY EXAMPLE》
2025-01-23
SwiftUI(二十三)- 使用SwiftUI开发一个顶部通知弹窗卡片源码
2024-12-31
iOS Swift 使用Core Animation框架实现的跳动小红心
2024-12-24
UIKit中使用SwiftUI的实际开发案例
2024-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人