在UIScrollView上多次放置一个SubView

时间:2014-09-24 01:33:03

标签: ios objective-c pointers uiview uiscrollview

我有一个UIScrollView,其中UIViews是通过延迟加载算法添加的。 UIViews包含上一个和下一个图像的预览,因此在某些时候实际视图必须被多次使用(例如,第二张图片的预览现在是NEXT,但是在2页滚动之后它是上一个)。

所有UIView都存储在NSMutableArray中并动态添加。我有代码检查是否已将特定的UIView添加到UIScrollView中。如果没有,代码检查,NSMutableArray中是否需要UIView,如果没有,则创建一个新的...

当我尝试从NSMutableArray获取UIView,更改它在屏幕上的位置并再次添加到UIScrollView时,会出现问题。它只是改变了它的位置,我看到了一些UIViews所必须的白色方块。

是否可以将2个UIViews指针指向一个内存位置或UIImage,但只有一个不同的参数(位置)?将已创建的UIView复制到NSMutable数组两次以使用不同的位置是不是一个好主意? (赢:创建过程只发生一次,丢失:所需的内存量翻倍)。

1 个答案:

答案 0 :(得分:0)

从我的观点来看,我没有提供好的解决方案,但这对我有用 - 我刚刚在UIView子类中实现了copy方法,如下所示:

- (ExhibitPreview *)copy {
    ExhibitPreview *exhibitPreview =[[ExhibitPreview alloc] initWithImage:self.image];

    exhibitPreview.number.text = self.number.text;
    exhibitPreview.author.text = self.author.text;
    exhibitPreview.title.text = self.title.text;


    exhibitPreview.contentMode = UIViewContentModeScaleAspectFill;
    exhibitPreview.clipsToBounds = YES;

    CGRect screenRect = [[UIScreen mainScreen] bounds];
    CGFloat screenWidth = screenRect.size.width;

    CGRect frame = CGRectMake(0.0f, 0.0f, screenWidth/2, PREVIEW_HEIGHT);
    exhibitPreview.frame = frame;

    return exhibitPreview;
}

第一个视图是视图本身,我创建的第二个视图是副本。