努力使我的应用程序在iPhone 5和较小的iPhone之前工作.很高兴要求iOS6并使用Autolayout因为它很好用.
但是,应用程序有4个按钮,可以定期交换位置,因此我为每个按钮分配一个与数组不同的位置,然后使用以下内容为动画设置动画:
[UIView animateWithDuration:0.5 animations:^{ button1.center = [[locations objectAtIndex:0] CGPointValue]; button2.center = [[locations objectAtIndex:1] CGPointValue]; button3.center = [[locations objectAtIndex:2] CGPointValue]; button4.center = [[locations objectAtIndex:3] CGPointValue]; }];
这不适用于Autolayout.没有什么变化.我得到的最好的是它会动画到一个位置,然后立即回弹.
当我删除Autolayout但是所有的按钮都在较小的iPhone上被碾碎,并且由于我使用的是iPhone 5尺寸设置的点,它们最终会降低,将底部行放在屏幕上.我原来有来自Interface Builder的不同的CGPoint数字,但它们是“错误的”,虽然我认为它们是“错误的”,因为它们是Autolayout使用的数字.数组就这样你可以看到:
buttonLocations = [NSArray arrayWithObjects: [NSValue valueWithCGPoint:CGPointMake(57,523)],[NSValue valueWithCGPoint:CGPointMake(109,[NSValue valueWithCGPoint:CGPointMake(57,471)],nil];
我该怎么做才能解决这个问题?为每个尺寸的设备设置不同的点似乎不是很有效.
解决方法
解决方案是您为items属性设置动画,而不是它的位置.
该位置将由autolayout设置,你不想打它.但是,屏幕上的实际位置将是其“正确”(由自动布局设置)位置,由其变换属性抵消.
所以你可以说button.transform = CGTransformMake(x,y),它将从它的中心位置出现x和y.
有很多CGWhatever宏可以轻松地进行这些变换,你可以在动画块中更改它们来移动项目.