Skip to content

Latest commit

 

History

History
33 lines (26 loc) · 1.73 KB

content.md

File metadata and controls

33 lines (26 loc) · 1.73 KB

如何定制一个 UIView 类型控件的出入动画

作者: halohily

在 iOS 开发中,自定义的弹层组件非常常见,比如分享框、自定义的 actionSheet 组件等。有的场景下,会选择使用 UIViewController 类型来实现,这时定制这个视图的出现、隐藏动画非常方便。然而,有时候需要选择轻量级的 UIView 类型来实现。这时该怎么定制它的出现、隐藏动画呢?这里提供一个思路:

使用 UIView 的 willMoveToSuperview:didMoveToSuperview这组方法,它们会在 UIView 作为subView 被添加到其他 UIView 中时调用。这里需要注意,自身调用 removeFromSuperview 方法时,同样会触发这组方法,只不过这时的参数会是一个 nil。

提供一个例子来说明:一个选择 UIView 类型实现的自定义 actionSheet 的出入动画,交互基本和微信一致。

#pragma mark - show & dismiss
- (void)didMoveToSuperview {
	if (self.superview) {
		[UIView animateWithDuration:0.35 delay:0 usingSpringWithDamping:0.9 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseIn animations:^{
			_backgroundControl.alpha = 1;
			self.actionSheetTable.frame = CGRectMake(0, SCREEN_HEIGHT - _sheetHeight, SCREEN_WIDTH, _sheetHeight);
		} completion:^(BOOL finished) {
			[super didMoveToSuperview];
		}];
	}
}

- (void)hideSelf {
	[UIView animateWithDuration:0.35 delay:0 usingSpringWithDamping:0.9 initialSpringVelocity:10 options:UIViewAnimationOptionCurveEaseIn animations:^{
		_backgroundControl.alpha = 0;
		self.actionSheetTable.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, _sheetHeight);
	} completion:^(BOOL finished) {
		[self removeFromSuperview];
	}];
}