我遇到CGAffineTransformMakeScale
时遇到问题。我正在显示一个视图&使用下面的代码隐藏它。它第一次显示&完全被解雇了。但之后再没有出现。在我打印完日志之后,它实际上已经不再是屏幕上的coorediantes了。
我在解雇时使用重置转换,使用CGAffineTransformIdentity
,但仍无法正常工作。
- (void) showWithAnimation
{
float mheight = customView.frame.size.height;
UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;
if(!keyWindow)
{
NSArray *windows = [UIApplication sharedApplication].windows;
if(windows.count > 0)
keyWindow = [windows lastObject];
keyWindow = [windows objectAtIndex:0];
}
UIView *containerView = [[keyWindow subviews] objectAtIndex:0];
CGRect frame = customView.frame;
frame.origin.y = -mheight;
customView.frame = frame;
NSLog(@"customView - %@", customView);
[containerView addSubview:customView];
customView.alpha = 0;
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
customView.center = CGPointMake((ScreenBounds().size.width / 2) - 24, ScreenBounds().size.height / 2);
NSLog(@"customView After applying transfrom - %@", customView);
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
customView.transform = CGAffineTransformMakeScale(1, 1);
customView.alpha = 1;
}
completion:^(BOOL finished){
self.isVisible = YES;
NSLog(@"customView Displayed .....");
NSLog(@"customView - %@", customView);
}];
}
- (void)dismissWithAnimation
{
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
customView.alpha = 0;
}
completion:^(BOOL finished)
{
self.isVisible = NO;
**//Edit: I tried applying CGAffineTransformIdentity at here**
[customView removeFromSuperview];
}];
}
以下是日志,
--> 1st time logs
customView -> <UIView: 0x205a1e50; frame = (24 -150; 272 150); layer = <CALayer: 0x205a1eb0>>
customView After applying transfrom - <UIView: 0x205a1e50; frame = (134.64 283.25; 2.72 1.5); transform = [0.01, 0, 0, 0.01, 0, 0]; alpha = 0; layer = <CALayer: 0x205a1eb0>>
customView Displayed .....
customView - <UIView: 0x205a1e50; frame = (0 209; 272 150); layer = <CALayer: 0x205a1eb0>>
--> 2nd time logs
customView -> <UIView: 0x205a1e50; frame = (24 -204; 272 204); transform = [0.01, 0, 0, 0.01, 0, 0]; alpha = 0; animations = { transform=<CABasicAnimation: 0x2072c620>; opacity=<CABasicAnimation: 0x2072df20>; }; layer = <CALayer: 0x205a1eb0>>
customView After applying transfrom - <UIView: 0x205a1e50; frame = (3.03984e-06 182; 272 204); transform = [0.01, 0, 0, 0.01, 0, 0]; alpha = 0; animations = { transform=<CABasicAnimation: 0x2072c620>; opacity=<CABasicAnimation:
0x2072df20>; }; layer = <CALayer: 0x205a1eb0>>
customView Displayed .....
customView - <UIView: 0x205a1e50; frame = (-13464 -9916; 27200 20400); layer = <CALayer: 0x205a1eb0>>
这里有什么问题。
答案 0 :(得分:1)
我总是检查动画是否完成......并在动画开始之前重置动画......就像这样......
// skipping some of ur code...
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
customView.transform = CGAffineTransformMakeScale(1, 1);
customView.alpha = 1;
}
completion:^(BOOL finished){
if (finished)
{
customView.transform = CGAffineTransformMakeScale(1, 1);
customView.alpha = 1;
self.isVisible = YES;
NSLog(@"customView Displayed .....");
NSLog(@"customView - %@", customView);
}
}];
//解雇动画
- (void)dismissWithAnimation
{
customView.transform = CGAffineTransformMakeScale(1.0, 1.0);
[UIView animateWithDuration:0.3
delay:0.0
options:UIViewAnimationCurveEaseInOut
animations:^{
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
customView.alpha = 0;
}
completion:^(BOOL finished) {
if (finished)
{
self.isVisible = NO;
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
customView.alpha = 0;
[customView removeFromSuperview];
}
}];
}
//编辑 - 试试这个。
customView.alpha = 0;
customView.transform = CGAffineTransformIdentity; //Reset the transformation...
customView.transform = CGAffineTransformMakeScale(0.01, 0.01);
customView.center = CGPointMake((ScreenBounds().size.width / 2) - 24, ScreenBounds().size.height / 2);
答案 1 :(得分:0)
使用以下功能添加........
-(void) addSubViewWithPopUpAnimation:(UIView *)subView toView:(UIView *)containerView
{
[subView setTransform:CGAffineTransformMakeScale(0.1, 0.1)];
[subView setAlpha:0.0f];
[containerView addSubview:subView];
[UIView animateWithDuration:0.3 animations:^
{
[subView setTransform:CGAffineTransformMakeScale(1.15, 1.15)];
}
completion:^(BOOL finished)
{
if(finished)
{
[UIView animateWithDuration:0.15 animations:^
{
[subView setTransform:CGAffineTransformMakeScale(1.0, 1.0)];
[subView setAlpha:1.0f];
}];
}
}];
}
使用以下功能删除........
-(void) removeSubViewWithPopUpAnimation:(UIView *)subView
{
[subView setAlpha:1.0f];
[subView setTransform:CGAffineTransformMakeScale(1.0, 1.0)];
[UIView animateWithDuration:0.3 animations:^
{
[subView setTransform:CGAffineTransformMakeScale(0.01, 0.01)];
}
completion:^(BOOL finished)
{
if(finished)
{
if([subView superview])
{
[subView removeFromSuperview];
[subView setAlpha:0.0f];
}
}
}];
}
这肯定会帮助你............