ios - 将 UIImageView 修改为 UIScrollView 中的 subview

标签 ios swift uiscrollview uiimageview

我有一个以编程方式添加 UIImageView 的 ScrollView 。

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

我已经尝试过此操作,但收到错误“无法分配给“ 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)
            }
        }

我似乎 View 被分配了 AnyObject 并且无法转换为它实际上是的 UIImageView。

有人可以帮忙吗?

最佳答案

您所看到的问题的原因是您正在使用 let ,这使得您的 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 的所有 subview 都是 UIView(对于任何 UIView 子类都是如此:它们的 subview 都是 UIView),但它们不一定都是 UIImageView,并且 UIImageView 不一定是您添加的 UIImageView。无法保证 UIScrollView 不包含您未添加到其中的 View 。

关于ios - 将 UIImageView 修改为 UIScrollView 中的 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31462635/

相关文章:

swift euc-kr 韩语编码不起作用。但可以在 python 中使用

ios - 使用制图的 UIScrollView contentSize 高度

ios - 如何使 View 滚动到 ScrollView 动画?

php - HTTPS PHP 大型 XML 负载无法通过回显到达客户端

ios - 使用 KeyedDecodingContainer 解码具有随 secret 钥的对象

ios - Swift - 惰性变量是线程安全的吗?

后台的 ios(swift) 位置 (ios 9.3.2) 停止工作

ios - 降低 'Deployment Target' 以查看较旧的模拟器或在更新后检查您的 Apple SDK 路径警告

iOS-Swift,Stripe 创建临时 key 返回 Google 登录页面

ios - 向下滑动 ScrollView 以关闭 View Controller