4

当用户点击其超级视图时,我正在运行此代码以缩小 UIView。然而,当应用 CGAffineTransformScale() 时,它也会改变中心。这是预期的行为吗?

-(void) onTap:(UITapGestureRecognizer *)tap{


    [UIView animateWithDuration:1.2
                          delay:0
                        options:0
                     animations:^{
                         CGAffineTransform transform = self.icon.transform;
                         NSLog(@"Previous center: %@", NSStringFromCGPoint(self.icon.center));

                         self.icon.transform = CGAffineTransformScale(transform, 0.5, 0.5);

                         NSLog(@"Next center: %@", NSStringFromCGPoint(self.icon.center));
                     } completion:^(BOOL finished) {
                         //
                     }];


}
4

2 回答 2

8

我终于发现了发生了什么:自动布局正在重新定位子视图并更改中心。

于 2012-10-17T12:38:57.487 回答
2

我使用 ObjC 在 ViewController 中测试了这段代码:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Create a subview
    CGRect bounds = CGRectMake(10, 10, 100, 100);
    UIView* v = [[UIView alloc] initWithFrame: bounds];
    [v setBackgroundColor:[UIColor yellowColor]];
    [self.view addSubview:v];

    icon = v;
}

并在 viewDidAppear 中启动了一个动画:

- (void)viewDidAppear:(BOOL)animated
{
    NSLog(@"Previous center: %@", NSStringFromCGPoint(self.icon.center));

    [UIView animateWithDuration:1.2 
          delay:1.0 
        options:0 
     animations:^{
         NSLog(@"Before center: %@", NSStringFromCGPoint(self.icon.center));

         CGAffineTransform transform = self.icon.transform;
         self.icon.transform = CGAffineTransformScale(transform, 0.5, 0.5);

         NSLog(@"After center: %@", NSStringFromCGPoint(self.icon.center));
     }
     completion:^(BOOL finished){
         // nothing
         NSLog(@"Completion center: %@", NSStringFromCGPoint(self.icon.center));
     }];        
}

每次通话的中心都是相同的(60,60):

2012-09-24 10:22:11.776 ScaleView[19611:f803] Previous center: {60, 60}
2012-09-24 10:22:11.778 ScaleView[19611:f803] Before center: {60, 60}
2012-09-24 10:22:11.779 ScaleView[19611:f803] After center: {60, 60}
2012-09-24 10:22:13.979 ScaleView[19611:f803] Completion center: {60, 60}

所以我会说不,这不是预期的行为。

于 2012-09-24T16:27:42.003 回答