UIView拉伸侧而不是调整宽度&起源

时间:2011-08-10 14:51:32

标签: objective-c ios uiview transformation

这可能是一个简单的问题,无论是否可能,我都不知道;但也很容易。

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)。

2 个答案:

答案 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,但如果您没有,并且您知道viewScreen的子视图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];