2012-09-26 104 views
0

我对UIImageView进行了子类化。当它被双击时,它会增加40%。我也有一个UILabel,我放在自定义的UIImageView中,并希望它放大40%。动画故障

我似乎无法得到它正确的动画。

-(void)enlargeImage 
{ 
    CGPoint pointCenter = self.center; 
    CGPoint labelCenter = self.displayNameLabel.center; 

    [UIView animateWithDuration:1 
          delay:0 
         options:(UIViewAnimationOptionAllowUserInteraction) 
        animations:^{ 
        self.frame = CGRectMake(self.frame.origin.x, 
              self.frame.origin.y, 
              self.frame.size.width * (1 + self.sizeMultiplier), 
              self.frame.size.height * (1 + self.sizeMultiplier)); 
         // Commented out after setting the autoresizeMask on the label 
         /* 
         self.displayNameLabel.frame = CGRectMake(self.displayNameLabel.frame.origin.x, 
                    self.displayNameLabel.frame.origin.y, 
                    self.displayNameLabel.frame.size.width * (1 + self.sizeMultiplier), 
                    self.displayNameLabel.frame.size.height * (1 + self.sizeMultiplier)); 
         */ 
         self.layer.shadowOpacity = 1; 
        } 
        completion:^(BOOL finished) 
        { 
         [self callDelegateSelect]; 
        }]; 

    self.center = pointCenter; 

    //self.displayNameLabel.center = labelCenter; 
    //self.displayNameLabel.center = CGPointMake((self.frame.size.width/2), (self.frame.size.height/2)); 

    self.isSelected = TRUE; 
} 


-(void)shrinkImageWithZoomScale:(float)zoomScale 
{ 
    CGPoint pointCenter = self.center; 

    CGPoint labelCenter = self.displayNameLabel.center; 

    [UIView animateWithDuration:1 
          delay:0 
         options:(UIViewAnimationOptionAllowUserInteraction) 
        animations:^{ 
        self.frame = CGRectMake(self.frame.origin.x, 
              self.frame.origin.y, 
              (self.originalHeight/zoomScale), 
              (self.originalHeight/zoomScale)); 

         // Commented out after setting the autoresizeMask on the label 
         /* 
         self.displayNameLabel.frame = CGRectMake(self.displayNameLabel.frame.origin.x, 
                    self.displayNameLabel.frame.origin.y, 
                    ((self.originalLableHeight)/zoomScale), 
                    ((self.originalLableHeight)/zoomScale)); 
         */ 
         self.layer.shadowOpacity = 0; 
        } 
        completion:^(BOOL finished) 
        { 
         [self callDelegateDeselect]; 
        }]; 

    self.center = pointCenter; 
    //self.displayNameLabel.center = labelCenter; 
    //self.displayNameLabel.center = CGPointMake((self.frame.size.width/2), (self.frame.size.height/2)); 

    self.isSelected = FALSE; 
} 

自定义动画的UIImageView究竟如何我想它,但该行为不端的UILabel。

非选择(UILabel的背景设置为橙色):

unselected

选自:

selected

我猜自的UIImageView的点参考是变化的,其搞乱点我告诉UILabel是?

编辑:

自定义的UIImageView的:

self.autoresizesSubviews = TRUE; 

子视图的UILabel:

self.displayNameLabel.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); 

这样可以解决大小问题,但它不会从中心生长;在成长的过程中,它向右移动,并将动画留给中心。当缩小时,它向左移动并且向右移动到中心。我还评论说在动画代码中设置标签的框架。

回答

1

如果UILabelUIImageView的子视图,你可以尝试设置UILabel的自动尺寸选项,以便它时,它的父做自动调整。

此外,请确保UIImageViewautoresizesSubviews属性设置为YES(这是默认方式)。

+0

好吧,我已经将autoresizeSubviews设置为true;没有意识到我需要在标签上设置autoresizingMask,谢谢。尽管如此,它并没有完全解决这个问题。当它增长时,标签向右移动,然后向左移动到中心。当它缩小时,它会调整大小并向左移动,然后向右移动到中心。我希望它从中心发展并缩小到中心。 – Padin215

+0

您可以使用自动调整掩码来完成此操作,并且不会在'enlargeImage'方法中修改标签的'frame'。你确实删除了这段代码,不是吗? –

+0

是的,我评论了设置UILabel的框架。 – Padin215