查看 IOS 5.x 和 IOS 4.x 之间的行为差​​异

Posted

技术标签:

【中文标题】查看 IOS 5.x 和 IOS 4.x 之间的行为差​​异【英文标题】:View behaviour differences between IOS 5.x and IOS 4.x 【发布时间】:2012-08-02 13:46:02 【问题描述】:

我一直在尝试为图像视图设置动画以在屏幕上向上滑动。当位置向上移动时,视图高度也会增加。

在我的 iPhone 4S (5.x) 上,图像视图的行为与预期一样,视图只会随着高度的增加而向上移动,但在我的 iPhone 3G (4.1) 上,视图在此动画期间会向下移动一点。

由于图像视图用于创建不昂贵的阴影效果,因此需要这样的精度。它的对齐对于效果很重要。该图像是可调整大小的图形。

这就是我改变视图位置和大小的方式

  CGRect oldShadow = self.shaddowView.frame;
  oldShadow.size.height = oldShadow.size.height+200;
  oldShadow.origin.y = oldShadow.origin.y - 200;
  self.shaddowView.frame =oldShadow;

这是如何将视图的图像设置为可调整大小的:

  UIImage* shadow = [[UIImage imageNamed:@"shadow.png"] stretchableImageWithLeftCapWidth:20 topCapHeight:20];
self.shaddowView.image = shadow;

谢谢。

【问题讨论】:

【参考方案1】:

我使用了以下动画,不仅在起始位置而且在预期的最终位置周围都有一个边框,这样我就可以确认是否发生了任何不希望的视图移动(除了明显的向上扩展),但是它在 ios 4.2.1 上运行良好:

[UIView animateWithDuration:2.0
                 animations:^
                     CGRect newImageFrame = imageView.frame;
                     newImageFrame.origin.y -= stretchBy;
                     newImageFrame.size.height += stretchBy;
                     imageView.frame = newImageFrame;
                 ];

我身边没有 iOS 4.1 设备(我的旧 3G 测试手机运行的是 iOS 4.2.1,该设备支持的最新 iOS 版本),所以我不能说,但 iOS 没问题4.2.1.

不过,我必须承认,我发现当您对帧的更改进行动画处理时,最终帧不太可能与您指定的完全相同。如果你在完成时NSLog 框架,它是不是正确的值?或者你是说它在动画过程中暂时移动但最终在正确的位置?或者它在动画过程中向下移动并在动画完成后最终处于错误的位置?

我想知道是否还有其他事情发生(例如,您的动画视图是滚动视图的子视图,它本身可能会发生变化?还是这里没有显示一些代码在动画之后意外地进一步调整帧?等.)。似乎稍微调试一下应该可以确认框架是否实际上不是您想要的,或者是否存在其他问题。


我最初回答建议shouldRasterize 选项,但如果您尝试支持旧的 iPhone 3G 设备,那么这可能还不够好。这些旧手机肯定有点口吃。无论如何,这是我原来的答案:

我假设您这样做是因为layer 阴影功能占用了一点 CPU 资源。但我听说(但不能与之交谈)如果您使用 shouldRasterize 选项,效果会好一些:

viewThatNeedsShadow.layer.shadowColor = [UIColor blackColor].CGColor;
viewThatNeedsShadow.layer.shadowOffset = CGSizeMake(3.0, 3.0);
viewThatNeedsShadow.layer.shadowOpacity = 0.5;
viewThatNeedsShadow.layer.shouldRasterize = YES;
viewThatNeedsShadow.clipsToBounds = NO;

【讨论】:

以上是关于查看 IOS 5.x 和 IOS 4.x 之间的行为差​​异的主要内容,如果未能解决你的问题,请参考以下文章

融云4.x 版本升级到5.0 版本出现的问题

CBCentralManagerState(iOS 5.x 到 9.x)和 CBManagerState(iOS 10.x 或更高版本)之间的 CoreBluetooth 兼容性问题 [重复]

iOS 项目将 Xcode 4.2 更新到 Xcode 4.5

开发 iPhone/iPad 应用程序时要考虑的 iOS 版本

webpack@4.x迁移webpack@5.x记录,减少了1.2%的构建体积

UIAlertview 中的 UITextView 在 iOS 4.x 中不起作用