如何在单击按钮时通过动画显示视图?

2023-12-22

我是编码新手。我正在制作一个应用程序,我需要在单击按钮时显示一个视图,并且该视图应该看起来像是来自按钮本身。再次单击该按钮时,视图应返回到按钮(动画)。

我有翻转、卷曲等动画,但我不知道该怎么做。


这是一个简单的例子。放showView:作为按钮的操作。

- (IBAction)showView:(UIButton *)sender {
    // Create a view with the size and position of the tapped button
    UIView *view = [[UIView alloc] initWithFrame:sender.frame];
    // Set a color on the view
    view.backgroundColor = [UIColor redColor];
    // Add the new view to the main view. The new view will be displayed over any other views
    [self.view addSubview:view];
    // Animate the change of the new view's frame. We use the bounds of the main view.
    [UIView animateWithDuration:3.6 animations:^{
        view.frame = self.view.bounds;
    }];
}

完整的解决方案:

首先为视图和按钮创建属性。如何初始化它们取决于您。

@property (strong, nonatomic) UIButton *button;
@property (strong, nonatomic) UIView *aView;
...
@synthesize button = _button;
@synthesize aView = _aView;

然后创建一个方法,在两个帧之间对视图进行动画处理,并根据要求在动画结束时从其父视图中删除该视图。

- (void)animateView:(UIView *)view 
           fromRect:(CGRect)from 
             toRect:(CGRect)to 
       inParentView:(UIView *)parent 
     removeWhenDone:(BOOL)remove 
{
    if (!remove) {
        [parent addSubview:view];
    }
    view.frame = from;
    [UIView animateWithDuration:3.6 animations:^{
        view.frame = to;
    } completion:^(BOOL finished) {
        if (remove) {
            [view removeFromSuperview];
        }
    }];
}

然后创建一个布尔属性来指示是否显示视图,并为该属性实现一个自定义设置器。

@property (assign, nonatomic) BOOL viewShown;
...
@synthesize viewShown = _viewShown;

- (void)setViewShown:(BOOL)viewShown
{
    _viewShown = viewShown;
    if (_viewShown) {
        // Insert your own toRect
        [self animateView:self.aView fromRect:self.button.frame toRect:CGRectMake(0, 0, 100, 100) inParentView:self.view removeWhenDone:NO];
    } else {
        [self animateView:self.aView fromRect:self.aView.frame toRect:self.button.frame inParentView:self.view removeWhenDone:YES];
    }
}

最后,在按钮的操作中,您翻转viewShown财产。

- (IBAction)showView:(UIButton *)sender {
    self.viewShown = !self.viewShown;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在单击按钮时通过动画显示视图? 的相关文章

随机推荐

  • 小对象分配器

    有人在大型项目中使用过 Andrei Alexandrescu 的 Modern C Design 中的 SmallObjectAllocator 吗 我想实现这个分配器 但在我的项目中使用它之前我需要一些关于它的意见 我做了一些测试 看起
  • 错误:“operator<<”不匹配(操作数类型为“std::ostream”{aka“std::basic_ostream”} 和“std::_List_iterator”)

    你好 我试图打印一个整数列表 但我不断收到该错误 我有一个结构 上面有一个列表 struct faceFiguration int faceID list
  • 将可绘制资源图像转换为位图

    我正在尝试使用Notification Builder setLargeIcon bitmap 需要一个位图图像 我的可绘制文件夹中有要使用的图像 那么如何将其转换为位图 你可能的意思是Notification Builder setLar
  • python 多个 json 字典

    我有一个包含多个 json 字典的 json 文件 格式如下 x 1 y 2 z 3 x 2 y 3 z 4 x 3 y 4 z 5 如何将其转换为一种 json 字典格式 如下所示 items x 1 y 2 z 3 x 2 y 3 z
  • 为什么在 EmailJS 中添加服务时出现错误?

    我在尝试在电子邮件 JS 中配置服务时收到 412 Gmail API 请求的身份验证范围不足 此外 在使用 React js 库发送电子邮件时收到相同的错误 下面是错误的屏幕截图 添加服务时图像显示错误 https i stack img
  • php switch case 语句来处理范围

    我正在解析一些文本并根据一些规则计算权重 所有角色都具有相同的权重 这会使 switch 语句变得非常长 我可以在 case 语句中使用范围吗 我看到其中一个提倡关联数组的答案 weights array a z A Z gt 10 0 9
  • C++ 丢弃限定符

    我有这个错误 BSPArduino cpp 316 错误 将 const BSPArduino 传递为 this virtual void BSPArduino enableWdt const 的参数 WATCHDOG TIMER DELA
  • Java 应用程序如何部署在“现实世界”中?

    作为 Java 编程世界的新手 这个问题一直困扰着我 我首先相信所有的Java文件都被压缩成applets然后就跑了 但我很快意识到情况并非总是如此 有人可以向我解释一下我们如何将 Java 应用程序融入到日常生活的真实产品中吗 TL DR
  • g++ -std=c++0x 出现意外编译问题

    使用 g std c 0x 编译时 我遇到一些编译问题 将 T 类型的元素推回向量 这是一个最小的例子 include
  • Shell 脚本 If [ -f ./file ]

    我正在自学 shell 脚本 我正在研究如何执行 If 但我不明白一个例子 if f NAME tar then do something else something else 现在我做了一些实验 我给 NAME 提供了我目录中的一个文件
  • 使用 SimpleXMLElement 从对象获取数组

    我在获取这些对象中的数组时遇到一些问题 当我 print r 时 会打印以下代码 message object 是对象的名称 SimpleXMLElement Object header gt SimpleXMLElement Object
  • 在 iOS 中绘制多点路线

    我正在尝试在提供的地图应用程序中显示具有多个点的路线 我已经弄清楚如何显示以下两点之间的路线这个帖子 https stackoverflow com q 4609340 620197 我正在建立以下多个点的列表这些方向 http mapki
  • 从旋转的 UIImageView 创建 UIImage

    我有一个 UIImageView 里面有一张图片 我在显示之前通过将 UIImageView 的变换属性设置为 CGAffineTransformMakeRotation angle 来旋转图像 其中 angle 是以弧度为单位的角度 我希
  • 从 LAN 网络中的另一台 PC 访问 Wamp 2.5 phpmyadmin

    我可以从另一台电脑访问 wamp localhost 但是从这台电脑访问 phpmyadmin 时我无法访问如下图 在 WAMPServer 上 配置了 phpMyAdmin 工具 以便除了运行 WAMPServer 的 IP 之外 无法从
  • 如何使用 Angular 的 ngFor 实现项目重新排序/随机播放动画?

    Vue 用户很容易实现这样的 item shuffle 动画 请参阅他们的官方文档 我搜索了很多 但找不到适合 Angular 用户的解决方案 ngFor似乎在洗牌时切换项目内容而不是移动项目 这是我的演示 http embed plnkr
  • 在 PHP 中获取给定一周的开始天和结束天

    我正在尝试使用星期日作为开始日期和参考日期来获取周范围 例如 date 但我似乎无法弄清楚 例如 如果 date 为 2009 05 01 我将得到 2009 04 26 和 2009 05 02 2009 05 10 将产生 2009 0
  • ember 中具有多个步骤的手风琴向导

    我正在使用 ember 构建一个 巫师手风琴 基本上我想要的是 始终显示的手风琴 手风琴包含所有步骤 一个步骤处于活动状态 但也可能更改先前步骤的标题 每个步骤都有自己的模型 例如 第一步从国家 地区中选择 第二步从产品中选择 应该可以在步
  • UIView autoresizingMask问题

    在 iPad 中 我有一个 UIViewController 里面有另一个 UIview 位于底部 UIView Controller X UIView 是 X 我在 UIViewController 的 viewDidLoad 上为其定义
  • 数据库设计中的多对多关系

    我目前有一个数据库 其中有两个表 分别称为 Articles 和 Tags 为了允许文章属于多个类别 我有多对多的关系 这样的设计从性能上来说是不是一个错误呢 或者我应该删除这两个表之间的关系并添加第三个表作为桥梁 articlesTags
  • 如何在单击按钮时通过动画显示视图?

    我是编码新手 我正在制作一个应用程序 我需要在单击按钮时显示一个视图 并且该视图应该看起来像是来自按钮本身 再次单击该按钮时 视图应返回到按钮 动画 我有翻转 卷曲等动画 但我不知道该怎么做 这是一个简单的例子 放showView 作为按钮