iOS-垂直挤压图像

iOS-垂直挤压图像,ios,uiview,layer,uiviewanimation,Ios,Uiview,Layer,Uiviewanimation,我有一个圆形的图像,我想垂直“挤压”,使它看起来更像一条水平线,然后将其展开回原始形状。我认为这可以通过将层的定位点设置为中心,然后通过UIViewAnimation设置帧的动画,使帧的高度=1来实现 [self.imageToSquish.layer setAnchorPoint:CGPointMake(0.5, 0.5)]; CGRect newFrame = CGRectMake(self.imageToSquish.frame.origin.x, self.imageToSquish.

我有一个圆形的图像,我想垂直“挤压”,使它看起来更像一条水平线,然后将其展开回原始形状。我认为这可以通过将层的定位点设置为中心,然后通过UIViewAnimation设置帧的动画,使帧的高度=1来实现

[self.imageToSquish.layer setAnchorPoint:CGPointMake(0.5, 0.5)];

CGRect newFrame = CGRectMake(self.imageToSquish.frame.origin.x, self.imageToSquish.frame.origin.y, self.imageToSquish.frame.size.width, 1 );
[UIView animateWithDuration:3
                 animations:^{self.imageToSquish.frame = newFrame;}
                 completion:nil];

但是图像会向顶部收缩,而不是围绕中心收缩

您将为其提供一个框架,该框架的原点位于左上角,与开始时的位置相同。您可能希望执行类似操作,将图像的高度增加一半:

CGRect newFrame = CGRectMake(self.imageToSquish.frame.origin.x, self.imageToSquish.frame.origin.y + self.imageToSquish.frame.size.height / 2, self.imageToSquish.frame.size.width, 1);
或者,您可以更有效地将图像视图的
transform
属性设置为,例如,
cAffineTransformMakeScale(1,0.01)
,而不是弄乱其帧。这将集中在图像的中间,通过将变换设置为
cGraffeTransformIdentity
,您可以轻松地撤消它