在UIScrollView中将UIImageView修改为子视图

时间:2015-07-16 19:13:44

标签: ios swift uiscrollview uiimageview

我有一个滚动视图,以编程方式添加UIImageViews。

我想循环浏览每个ImageView并在旋转设备时调整它们的帧。

我已经尝试了这个但是得到错误“无法在'视图'中分配给'框架'”

func rotated(){

    self.imageScrollView.layoutIfNeeded()
    var iCount:CGFloat = 0
    var viewFrame = self.imageScrollView.frame
    var viewHeight = viewFrame.height
    var subviews:NSArray = self.imageScrollView.subviews
    for view in subviews{
        if let imageView = view as? UIImageView{
            var frame = CGRectMake(0, iCount * viewHeight, self.imageScrollView.frame.width, self.imageScrollView.frame.height)
            ++iCount
            view.frame = frame
        }

    }

}

添加图片

    for image in self.gallery{
            var pImageView = UIImageView()
            pImageView.contentMode = UIViewContentMode.ScaleAspectFit
            var frame = CGRectMake(0, iCount * viewHeight, self.imageScrollView.frame.width, self.imageScrollView.frame.height)
            ++iCount
            pImageView.frame = frame
            let file = image["pImage"] as? PFFile
            file?.getDataInBackgroundWithBlock{(data: AnyObject?, error: NSError?) -> Void in
                var tempData = data as! NSData
                pImageView.image = UIImage(data: tempData)
                self.imageScrollView.addSubview(pImageView)
            }
        }

我认为该视图被赋予了AnyObject,并且无法转换为它实际上的UIImageView。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您遇到问题的原因是您正在使用,这会使您的imageView变量不可变。这就是为什么你不能改变它的框架。

我所做的评论并非旨在解决您的特定问题的原因,而是指出一个设计缺陷。尽管如此,您在评论中请求的下面的代码已更改为在数组中跟踪您的UIImageViews。除此之外,我在发布时留下了代码。作为副作用,此代码也应解决您所看到的错误。

var imageViews: [UIImageView] = []

func rotated(){

    self.imageScrollView.layoutIfNeeded()
    var iCount:CGFloat = 0
    var viewFrame = self.imageScrollView.frame
    var viewHeight = viewFrame.height
    var subviews:NSArray = self.imageScrollView.subviews
    for view in imageViews{
        var frame = CGRectMake(0, iCount * viewHeight, self.imageScrollView.frame.width, self.imageScrollView.frame.height)
        ++iCount
        view.frame = frame

    }
}

初始化UIImageViews的代码(可能在同一个类中,否则你还有更多工作要做):

for image in self.gallery{
            var pImageView = UIImageView()
            pImageView.contentMode = UIViewContentMode.ScaleAspectFit
            var frame = CGRectMake(0, iCount * viewHeight, self.imageScrollView.frame.width, self.imageScrollView.frame.height)
            ++iCount
            pImageView.frame = frame
            let file = image["pImage"] as? PFFile
            file?.getDataInBackgroundWithBlock{(data: AnyObject?, error: NSError?) -> Void in
                var tempData = data as! NSData
                pImageView.image = UIImage(data: tempData)
                self.imageScrollView.addSubview(pImageView)
                imageViews.append(pImageView)
            }
        }

所有UIScrollView的子视图都是UIViews(对于任何UIView子类都是如此:它们的子视图都是UIViews),但它们不一定都是UIImageViews,而UIImageViews的子视图不一定是你添加的UIImageViews。无法保证UIScrollView不包含您未添加到其中的视图。