ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

UIView交叉淡化动画的艺术:MMTextFieldEffects中transitionWithView用法完整教程

2026/8/27 17:09:06 拓冰建站 浏览量
UIView交叉淡化动画的艺术:MMTextFieldEffects中transitionWithView用法完整教程 UIView交叉淡化动画的艺术MMTextFieldEffects中transitionWithView用法完整教程【免费下载链接】MMTextFieldEffectsExtension of TextFieldEffects with Custom UITextFields effects inspired by Codrops, built using Objective-C项目地址: https://gitcode.com/gh_mirrors/mm/MMTextFieldEffectsMMTextFieldEffects 是一个用 Objective-C 实现的 UITextField 动效库复现了 Codrops 经典的文本框动画。本文以它的源码为例手把手讲透 UIKit 中UIView 交叉淡化动画cross dissolve的核心 APItransitionWithView:的用法帮你在文本框聚焦/失焦时做出丝滑的过渡效果。一、transitionWithView 是什么transitionWithView:是 UIView 的一个类方法官方定义为 (void)transitionWithView:(UIView *)view duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;它和普通animateWithDuration:最大的区别在于你在animations闭包中直接修改视图的最终状态frame、字体、颜色等系统会自动截取视图的旧快照和新快照按options指定的方式做过渡动画交叉淡化Cross Dissolve就是旧画面淡出、新画面淡入两者重叠渐隐视觉上没有位移感非常柔和。 记忆技巧普通动画是让视图自己移动而 transition 是给视图换装换装过程自带特效。二、四个参数怎么配参数作用建议取值view要执行过渡的目标视图本例中统一用占位符placeHolderLabelduration过渡时长0.2 ~ 0.5 秒最自然options过渡风格UIViewAnimationOptionTransitionCrossDissolve交叉淡化animations设置最终状态改 frame、font、textColor 等options 除了交叉淡化还支持FlipFromLeft/FlipFromRight翻页、FadeThroughBlack黑场过渡按需选择即可。三、实战Ichiro 效果中的交叉淡化在 MMTextFieldEffects/IchiroTextField.m 中动效的核心逻辑写在代理方法里几乎只有一行transitionWithView:聚焦时占位符缩小并淡化上移文本框开始编辑时textFieldDidBeginEditing:在 IchiroTextField.m#L99-L115[UIView transitionWithView:self.placeHolderLabel duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ // 只写最终状态淡化过程由系统完成 self.placeHolderLabel.font [UIFont fontWithName:AvenirNext-Medium size:14.0]; self.placeHolderLabel.frame CGRectMake(placeholderInset.x, placeholderInset.y, self.bounds.size.width, 20); } completion:^(BOOL finished) { // 过渡结束后再用普通动画补充边框层 }];占位符从 18pt 大字变成 14pt 小字、并上移到顶部旧字号淡出、新字号淡入两个形态交叉重叠这就是交叉淡化的典型观感失焦时反向过渡回初始形态在 IchiroTextField.m#L122-L145 的textFieldDidEndEditing:中当内容为空时先收缩输入区再在 completion 里嵌套第二次transitionWithView:把占位符淡化回18pt 大字居中状态。两次 transition 一出一回构成完整的呼吸感。这种transition 完成后再接一次animateWithDuration:的接力写法在 KuroTextField.m#L138-L152、MinoruTextField.m#L119-L138 中也反复出现是本项目的通用动画编排模式。四、各效果中的差异速查库里 7 个文本框效果几乎都用了同一个 API只是时长和参数略有不同可对照源码快速学习经典交叉淡化IchiroTextField.m#L101、JuroTextField.m#L94-L104、YoshikoTextField.m#L103左右色块展开KuroTextField.m#L138-L152placeholder 先用CGAffineTransformMakeScale(0.0, 0.0)缩到消失配合交叉淡化淡出纯淡入淡出NarikoTextField.m#L125 中options传0即默认的 fade 效果时长 0.3 秒更轻快五、如何在 Storyboard 中接入这些文本框无需手动创建控件——直接把 Storyboard 里的 UITextField 的 Custom Class 改成对应效果类即可。例如选中文本框在右侧检查器中把 Class 设为JuroTextField其他效果同理换成 IchiroTextField.h、KuroTextField.h 等由于每个效果类都实现了initWithCoder:Storyboard 反序列化时就能自动带上动效。注意默认文本框高度为 80可按需调整 TableViewController.m 中的布局。六、新手易踩的 3 个坑animations 里写过程而不是结果transitionWithView:只关心最终状态别在里面用逐帧思路写中间值。completion 里再动视图像 Ichiro 那样把第二阶段的边框动画放进completion避免两个动画抢同一视图造成跳变。transition 的 view 参数选错本例始终对placeHolderLabel做过渡让边框用普通动画职责分离画面才干净。小结transitionWithView:一行代码就能换来电影级的交叉淡化观感。MMTextFieldEffects 用同一套 API 编排出了 7 种风格各异的文本框动效建议按本文路径逐个打开源码对照运行把聚焦→过渡→completion 接力的节奏刻进肌肉记忆之后做任何 iOS 过渡动画都会顺手很多。【免费下载链接】MMTextFieldEffectsExtension of TextFieldEffects with Custom UITextFields effects inspired by Codrops, built using Objective-C项目地址: https://gitcode.com/gh_mirrors/mm/MMTextFieldEffects创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考