我有一个滚动视图,其中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不包含没有添加到它的视图