2011-12-12 131 views
0

以下代码具有(至少一个)深度缺陷:一旦设置了CGFrame,它的位置就是固定的。如何更新CGFrame?

-(UIImageView*) ownImageView { 

    if (ownImageView == nil) { 
     ownImageView = [[UIImageView alloc] initWithFrame: 
        CGRectMake(self.xPosition, self.yPosition, 
        [constants cardWidth], [constants cardHeight])]; 

     [ownImageView setImage:self.faceImage]; 
    } 

    return ownImageView; 
} 

我想重用UIImageView(创建一次,我不想realloc的话)。相反,我想改变它包含的帧的x,y坐标。

下面的代码工作正常,但是,它似乎漫不经心地浪费

-(UIImageView*) ownImageView { 

    [ownImageView removeFromSuperview]; 
    ownImageView = [[UIImageView alloc] initWithFrame: 
       CGRectMake(self.xPosition, self.yPosition, 
       [constants cardWidth], [constants cardHeight])]; 

    [ownImageView setImage:self.faceImage]; 

    return ownImageView; 
} 

问题:你将如何处理这个问题,同时保持尽可能多的懒实例化越好?

视图代表沿着屏幕移动的2D矩形。我想通过简单地改变现有视图的X/Y位置而不是用新副本替换它来表示“移动”。

回答

3
ownImageView.frame = CGRectMake(x,y,w,h); 
1

如果您想要移动它,最简单的方法就是让Core Animation为您完成工作。
对于更多详细信息和选项检查UIView Class Reference

[UIView animateWithDuration:2 
         delay:0 
        options:UIViewAnimationCurveEaseInOut 
       animations:^{ 
        self.THE_VIEW.center = CGPointMake(200, 200); 
       // OR you can change it's frame if you prefer 
       } 
       completion:NULL];