我有一个从UIImageView继承的类。然后,我有NSArray,它包含A类的对象,其中包含一些图片。然后,我只想添加到主视图(self.view addSubview: "object of Aclass")并删除其中的一些。我会继续这样做一段时间。这是问题。当我像添加时一样用一些UIImageView进行“添加”和“删除” Animation(一个类对象)时,UIImageView会从小到其原始大小,而当我删除时,它会从其原始大小变为较小

-(void)displayAClassObject: {
[self.view addSubview: AClassObject];
AClassObject.transform = CGAffineTransformMakeScale(0.3, 0.3);
[UIView animateWithDuration:0.2 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{ AClassObject.transform = CGAffineTransformIdentity; } completion:^(BOOL finished) {  }];
}

然后,某些函数将生成随机数字,以删除在主视图中添加的AClassObject
-(void)displayOffAClassObject {
[UIView animateWithDuration:0.1 animations:^{AClassObject.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.1, 0.1);} completion:^(BOOL finished){[AClassObject removeFromSuperview]; }];
[AClassObject removeFromSuperview];
}

当我再次将删除的AClassObject添加到主view时,我将其设置为不同的框架,以将其放置在Main视图中的不同位置,但是我不更改其大小。

这个过程每秒都在进行,但是当我仅添加或删除时,它工作正常。 AClassObject从小到其原始大小,然后从其原始大小变为小大小。但是当我像[self displayOffAClassObject]; [self displayAClassObject];一样同时做这两个时
UIImageView(AClassObject)变得很大,即使某些图像不在屏幕上。谁能告诉我这是怎么回事?或有任何解决建议?

最佳答案

当您进行变换(尤其是比例变换)时,.frame变为无效。在设置框架前先设置AClassObject.transform = CGAffineTransformIdentity。如果要在.transform不是标识时设置其位置,请改为设置.center
引用自UIView文档:

警告
如果此属性(.transform)不是标识转换,则frame属性的值未定义,因此应忽略。

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instp/UIView/transform

08-28 11:52