我试图每秒进行一次UIImageView更改。
更改可以包含以下两种方法之一: - 回转 - 位置变更
我使用以下内容:
这是初始化代码:
+(instancetype)newWithFrame:(CGRect)frame {
MySateliteView *v = [[[NSBundle mainBundle] loadNibNamed:@"Satelite" owner:self options:nil] objectAtIndex:0];
v.frame = frame;
v.lastLocation = [SateliteCoordinate new];
return v;
}
这是视图的完整代码:
-(void)createSateliteViewFromLocation:(SateliteLocation *)location {
CGPoint center = [self createPointFromLocation:location];
MySateliteView *locationView;
for (MySateliteView *v in _satelites) {
if (v.tag == location.sateliteNumber.integerValue) {
locationView = v;
break;
}
}
if (!locationView) {
locationView = [MySateliteView newWithFrame:CGRectMake(center.x - 15, center.y - 15, 30, 30)];
locationView rotate:location.coordinates.degree];
locationView.tag = location.sateliteNumber.integerValue;
[_satelites addObject:locationView];
[UIView animateWithDuration:0.7 animations:^{
[self addSubview:locationView];
}];
} else {
if ([locationView needsNewCenter:location.coordinates]) {
[UIView animateWithDuration:0.2 animations:^{
locationView.bounds = CGRectMake(0, 0, 30, 30);
locationView.center = center;
locationView.superview.clipsToBounds = YES;
}];
}
if ([locationView needsRotate:location.coordinates]) {
[locationView rotate:location.coordinates.degree];
}
}
}
出于某种原因,一旦在已经应用了旋转的情况下更改了中心,图像就会变大!
任何人都知道为什么以及我能做什么?
感谢名单!
答案 0 :(得分:0)
框架越来越大,因为您在视图中有约束,并且您手动使用中心。您不应该以这种方式混合自动布局和手动布局。我建议:
删除约束并手动执行所有视图布局,同时根据需要覆盖layoutSubviews
和drawRect:
,同时继续保留您已有的代码。
与约束交互而不是框架/中心/边界。您可以根据xib中的约束创建IBOutlet,以便修改它们的值。您可以在视图中覆盖系统提供的updateConstraints
方法,以确保正确提供约束。
更新约束以移动视图的示例可能如下所示:
[UIView animateWithDuration: .7, animations: ^{
self.constraint1.constant = 23;
[NSLayoutConstraint deactivateConstraints: @[self.constraint2]];
[self layoutIfNeeded];
}];