动画的单位宽度与固定的中心

时间:2022-04-24 20:28:10

How to animate a change in width while keeping the view centered?

如何在保持视图居中的同时使宽度的变化具有动画效果?

Currently when I do it, it doesn't grow from the center.

当我做的时候,它不会从中心生长。

self.textLabel = UILabel()
self.textLabel.frame = CGRectMake(0, 0, Globals.voterTextLabel, Globals.voterTextLabel)
self.textLabel.center = CGPointMake(self.view.frame.width/2, self.view.frame.height/2)
self.textLabel.text = "VS"
self.textLabel.layer.cornerRadius = Globals.voterTextLabel/2
self.textLabel.layer.masksToBounds = true
self.textLabel.clipsToBounds = true
self.textLabel.backgroundColor = UIColor.whiteColor()
self.textLabel.textColor = Colors.voterTextLabel
self.textLabel.textAlignment = .Center
self.textLabel.autoresizingMask = .FlexibleWidth
self.view.addSubview(self.textLabel) 

 UIView.animateWithDuration(2, animations: {
    self.textLabel.frame.size.width = 150
    self.textLabel.center.x = self.view.frame.width/2
 }, completion: nil)

1 个解决方案

#1


2  

This will work for you. You just need to give scale for width and height (default 1, which will have no effect). And this will animate your view's frame.

这对你有用。您只需要给出宽度和高度的刻度(默认为1,这将没有效果)。这将使视图的框架有动画效果。

    UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.BeginFromCurrentState, animations: { () -> Void in
        self.textLabel.transform=CGAffineTransformMakeScale(3, 1);
    }, completion: nil)

And if you don't want to stretch the content, than you may try this:

如果你不想延伸内容,你可以试试:

        UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in

        var newWidth:CGFloat = 200.0;

        var oldWidth:CGFloat = self.textLabel.frame.width;

        var totalChangeWidth:CGFloat = newWidth - oldWidth;

        var newHeight:CGFloat = 200.0;

        var oldHeight:CGFloat = self.textLabel.frame.width;

        var totalChangeHeight:CGFloat = newHeight - oldHeight;

        self.textLabel.bounds.size = CGSizeMake(self.textLabel.frame.size.width + totalChangeWidth, self.textLabel.frame.size.height + totalChangeHeight);

        self.textLabel.center = CGPointMake(self.view.frame.width/2, self.view.frame.height/2)

    }, completion:nil)

#1


2  

This will work for you. You just need to give scale for width and height (default 1, which will have no effect). And this will animate your view's frame.

这对你有用。您只需要给出宽度和高度的刻度(默认为1,这将没有效果)。这将使视图的框架有动画效果。

    UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.BeginFromCurrentState, animations: { () -> Void in
        self.textLabel.transform=CGAffineTransformMakeScale(3, 1);
    }, completion: nil)

And if you don't want to stretch the content, than you may try this:

如果你不想延伸内容,你可以试试:

        UIView.animateWithDuration(2, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: { () -> Void in

        var newWidth:CGFloat = 200.0;

        var oldWidth:CGFloat = self.textLabel.frame.width;

        var totalChangeWidth:CGFloat = newWidth - oldWidth;

        var newHeight:CGFloat = 200.0;

        var oldHeight:CGFloat = self.textLabel.frame.width;

        var totalChangeHeight:CGFloat = newHeight - oldHeight;

        self.textLabel.bounds.size = CGSizeMake(self.textLabel.frame.size.width + totalChangeWidth, self.textLabel.frame.size.height + totalChangeHeight);

        self.textLabel.center = CGPointMake(self.view.frame.width/2, self.view.frame.height/2)

    }, completion:nil)