我有一个以编程方式添加 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/