将UIImageView修改为UIScrollView中的子视图



我有一个滚动视图,其中UIImageViews是通过编程添加的。

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

我已经尝试过了,但得到错误"Cannot assign to 'frame' in 'view "

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,它实际上是。

有人能帮忙吗?

您看到的问题的原因是您正在使用这使得您的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的子视图都是UIView(这对任何UIView子类都是正确的:它们的子视图都是UIView),但它们不一定都是uiimageview,那些是uiimageview的不一定是你添加的uiimageview。不能保证UIScrollView不包含没有添加到它的视图

相关内容

最新更新