查看 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 之间的行为差异的主要内容,如果未能解决你的问题,请参考以下文章
CBCentralManagerState(iOS 5.x 到 9.x)和 CBManagerState(iOS 10.x 或更高版本)之间的 CoreBluetooth 兼容性问题 [重复]
iOS 项目将 Xcode 4.2 更新到 Xcode 4.5
开发 iPhone/iPad 应用程序时要考虑的 iOS 版本