我有一个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)
由于
答案 0 :(得分:0)
我怀疑问题是:
currentView.frame = frame;
或:
currentView.frame = currentView.window.bounds;
在横向模式下,您的视图或其中一个封闭视图具有将所有内容旋转90°的变换。作为UIView docs indicate,如果视图的frame
属性不是标识转换,则transform
属性是未定义的。可能是设置视图的frame
会隐式将其transform
设置回标识,从而使其旋转回纵向。
上面链接的文档都警告在发生转换时不要更改frame
,并提供解决方案:
可以设置对此属性的更改。但是,如果改造 property包含一个非标识变换,即帧的值 属性未定义,不应修改。在那种情况下,你 可以使用center属性重新定位视图并调整大小 使用bounds属性。