为什么我的视图在缩放前旋转90度?

时间:2012-05-30 14:43:29

标签: ios

我有一个UIView,当用户点击它时我想自动缩放到屏幕大小。

我从http://cocoawithlove.com/2010/09/zoomingviewcontroller-to-animate-uiview.html

获取代码

并且缩放工作,除了缩放开始之前视图旋转90度。为什么会这样?

(视图位于旋转木马中。在用户点击视图之前,设备旋转到横向,此时旋转木马的视图控制器被推到导航堆栈上并显示轮播。)

代码是:

- (void)buttonTapped:(UIButton *) sender
{
    NSInteger index = [self.carousel indexOfItemView:sender];

    UIView *currentView = [self.carousel itemViewAtIndex: index];
    UIView *proxyView = [[UIView alloc] initWithFrame:currentView.frame];
    proxyView.hidden = YES;
    proxyView.autoresizingMask = currentView.autoresizingMask;
    [currentView.superview addSubview: proxyView];

    CGRect frame = [currentView.window convertRect:currentView.frame fromView:proxyView.superview];
    [currentView.window addSubview:currentView];
    currentView.frame = frame;

    [UIView
     animateWithDuration:2.4
     animations:^{
         currentView.frame = currentView.window.bounds;
     }];

(carousel是一个UIView派生对象,来自https://github.com/nicklockwood/iCarousel

由于

1 个答案:

答案 0 :(得分:0)

我怀疑问题是:

currentView.frame = frame;

或:

currentView.frame = currentView.window.bounds;

在横向模式下,您的视图或其中一个封闭视图具有将所有内容旋转90°的变换。作为UIView docs indicate,如果视图的frame属性不是标识转换,则transform属性是未定义的。可能是设置视图的frame会隐式将其transform设置回标识,从而使其旋转回纵向。

上面链接的文档都警告在发生转换时不要更改frame,并提供解决方案:

  

可以设置对此属性的更改。但是,如果改造   property包含一个非标识变换,即帧的值   属性未定义,不应修改。在那种情况下,你   可以使用center属性重新定位视图并调整大小   使用bounds属性。