最近遇到个需求,需要当手指向上划动时视图向上移动显示出隐藏在屏幕下方的菜单,这时整个视图的bounds需要大于屏幕大小,隐藏菜单才能接收到Touch事件,但是发现无论在loadView里初始化view的bounds为多大,最后它会自动变为屏幕大小。于是只能在swipe操作中处理了。
但是如果直接self.view.bounds = aBounds的话,会看到视图是以中心点进行伸缩的,而我需要的是以最上方为基点进行伸缩,解决方法是改变layer的anchorPoint,然后将layer的位置固定。
anchorPoint是CALayer的定位点,也就是设置position时对准的点,默认的anchorPoint是中心点。
- (void)loadView
{
CGRect frame = [UIScreen mainScreen].applicationFrame;
self.view = [[[UIView alloc] initWithFrame:frame] autorelease];
CALayer *layer = self.view.layer;
layer.anchorPoint = CGPointMake(0.5, 0); //Top-middle
layer.position = CGPointMake(kSelfViewWidth/2, 0);
}
- (void)swipe:(UISwipeGestureRecognizer *)g{
__block CGRect bounds = self.view.bounds;
float h = 520.0;
bounds.size.height = h;
CALayer *layer = self.view.layer;
layer.bounds = bounds;
...
}
转载于:https://blog.51cto.com/danal/729134