这可能是一个简单的问题,无论是否可能,我都不知道;但也很容易。
Screen = 0x 0y 1000w 1000h
UIView Start = 500x 0y 500w 1000h
UIView End = 0x 0y 1000w 1000h
我有一个UIView让我们说上面的尺寸和坐标覆盖屏幕的右侧。现在我知道要达到我必须做的终点
CGRectMake(start.origin.x - 500, start.origin.y, start.size.width + 500, start.size.height)
是否可以像
那样做[uiview stretchLeftSide:500];
这样我就不需要直接触摸原点或宽度了。它导致一些问题,因为视图包含控件,我无法管理那里锚定,所以他们只是跳转到指定的位置,然后视图调整(这是所有动画BTW)。
答案 0 :(得分:0)
据我所知,搬迁&以这种方式调整UIView
的大小 - CGRectMake(start.origin.x - 500, start.origin.y, start.size.width + 500, start.size.height)
就是这样做的方式。
这很难看,但这就是我以前做的事情。但是你可以继承UIView
并添加方法stretchLeftSide
并实现你想要的。在长期运行的项目中,这是绝对有意义的,应该作为一种实践来完成......
答案 1 :(得分:0)
首先,我假设您的UIView
(我们只是称之为视图)是Screen
的子视图(即您执行的操作类似[Screen addSubview:view]
)。
如果你想做动画所以左侧伸展你想要的方式,基本上,你所要做的就是将view
的原点设置为(0,0)
并且大小相同为Screen
。为此,您可以使用Screen.bounds
,这正是您想要的view
的最终帧。视图的bounds
属性始终具有(0,0)
的原点,并且大小等于视图的大小。
如果您引用Screen
,则可以使用上面提到的Screen.bounds
,但如果您没有,并且您知道view
是Screen
的子视图1}},然后您可以使用view.superview.bounds
。
现在是动画。因为我必须编写支持iOS版本3.0的应用程序,所以我不能使用块动画。相反,我使用UIView
这样的类方法:
// Here you can enter an identifier to identify your animation
// and an object that will be passed to your delegate.
// These 2 parameters are only useful if you set an animation delegate
// using [UIView setAnimationDelegate:delegate];
[UIView beginAnimations:nil context:nil];
// Duration in seconds
[UIView setAnimationDuration:0.5];
// Perform you changes here.
view.frame = view.superview.bounds;
// Commit the changes
[UIView commitAnimations];