2012-08-02 96 views
1

我一直在尝试将图像视图设置为在屏幕上向上滑动。当位置向上移动时,视图高度也增加。查看IOS 5.x和IOS 4.x之间的行为差​​异

在我的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; 

感谢。

回答

0

我使用了下面的动画,不仅围绕起始位置,而且围绕预期的最终位置,这样我就可以确认是否发生了任何不希望的视图移动(除了明显的向上扩展),但是它好工作在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没问题。

不过,我不得不承认,当我对动画改变框架进行动画制作时,最终的框架并不完全是你指定的。如果你完成了这个框架,它不是正确的值吗?或者你是否说它在动画期间瞬间移动,但最后会在正确的位置结束?或者即使在动画完成时它在动画期间向下移动并且以错误的位置结束?

我不知道是否还有其他事情正在进行(例如,您的动画视图是滚动视图的子视图,该视图本身可能正在移位?还是有一些代码未显示,意外地在动画之后进一步调整了框架?等等。)。似乎有点调试应该确认帧是否实际上不是你想要的,或者是否有其他问题正在进行。


我最初回答提示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;