gpt4 book ai didi

ios - 旋转设备时,动画 uiview 切换回其原始状态

转载 作者:行者123 更新时间:2023-12-01 17:18:17 27 4
gpt4 key购买 nike

我尝试在IOS7下制作一个小动画。我的 View Controller 有 2 个 View :一个 tableview 和一个 mapview。我有一个按钮,可以在“全屏显示 map ”和“显示 map 和表格 View ”状态之间切换。

这是我的实验代码:

float mapNewX =  self.mapView.frame.origin.x == 0 ? 375 : 0;
float mapNewWidth = mapNewX == 0 ? self.view.frame.size.width : self.view.frame.size.width - mapNewX;

[UIView animateKeyframesWithDuration:0.1 delay:0.0 options:UIViewAnimationCurveEaseOut animations:^
{
CGRect mapViewFrame = self.mapView.frame;
mapViewFrame.origin.x = (mapNewX);
mapViewFrame.size.width = mapNewWidth;
self.mapView.frame = mapViewFrame;
}
completion:^(BOOL finished)
{
NSLog(@"OK");
}];

它可以工作,但是当我旋转我的设备时,它会切换回原始状态。所以,当我有完整的 map 显示时,当旋转设备时,它会在屏幕上切换回 tableview + mapview。

如果我通过导航 Controller 从另一个 View Controller 返回,也会发生同样的情况。如果我点击 map 图钉的详细信息披露,它会切换回原始布局。

我该怎么办?非常感谢!

更新:这里是旋转前后的截图(一些敏感数据被屏蔽了)

enter image description here

enter image description here

最佳答案

如果你在旋转或屏幕导航后丢失了框架变化,它可能与 View Controller 的布局方法有关 viewWillLayoutSubviews , viewDidLayoutSubviews或生命周期方法viewWillAppear: , viewDidAppear: .如果您覆盖它们,请检查这些方法的实现。

因为您使用自动布局,所以最好为其约束设置动画而不是框架。

据我了解,您的任务是移动 map 的左侧以显示下方的表格 View (打开/关闭状态)。使用自动布局,您的屏幕可能看起来像这样简单:

enter image description here

(UIImageView View 起到了 map 的作用)
UITableView约束

  • 恒定宽度约束
  • super View 约束的顶部、前导和底部空间设置为零
  • UIImageView约束
  • 将 super View 约束设置为零的顶部、底部和尾随空间
  • 前导空格到 监督 设置为表格宽度(打开状态,为此约束设置动画)

  • 为了实现预期的效果,我们需要将前导空间设置为 super View 约束(在屏幕截图上选择)。我们为此约束创建一个导出并更改其 constant属性为打开/关闭状态。
    @property (weak, nonatomic) IBOutlet NSLayoutConstraint *mapLeadingSpace;

    在菜单出现在屏幕上之前设置菜单的初始状态。我们设置了默认值,但您可以从 NSUserDefaults 恢复适当的 bool 设置.
    - (void)viewWillAppear:(BOOL)animated
    {
    [super viewWillAppear:animated];

    self.mapLeadingSpace.constant = 0; // default is closed
    }

    接下来,在按下条形按钮时切换动画。
    - (IBAction)toggle:(id)sender
    {
    self.mapLeadingSpace.constant = self.mapLeadingSpace.constant == 0
    ? self.tableView.frame.size.width // opened
    : 0; // closed

    [UIView animateWithDuration:.2 animations:^{
    [self.imageView layoutIfNeeded];
    }];
    }

    关于ios - 旋转设备时,动画 uiview 切换回其原始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783285/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com