2017-03-01 55 views
1

我做了一个滚动视图,并制作了一个图像数组(我将稍后添加一个选项,用户将图像发布到该数组中,朋友图像将填充到该数组中)以及希望让用户能够看到照片并跟踪它。
ScrollView删除基于位置的图像

我已经创建了一个for循环,将照片添加到数组中,但是当我创建一个if语句来取出数组中的项目时,出现错误,因为我会从数组中删除图像[i]而且我知道为什么会发生这种情况,但是想要解决这个问题。所以基本上我需要在数组中取出图像。
请帮我解决我还在学习。

class ViewController: UIViewController { 

var imageArray = [UIImage]() 

@IBOutlet weak var mainScrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    mainScrollView.frame = view.frame 
    imageArray = [#imageLiteral(resourceName: "dubai6"), #imageLiteral(resourceName: "dubai2"), #imageLiteral(resourceName: "dubai7"), #imageLiteral(resourceName: "dubai4"), #imageLiteral(resourceName: "dubai3"), #imageLiteral(resourceName: "dubai5"), #imageLiteral(resourceName: "DigitalDrawingPreview"), #imageLiteral(resourceName: "denarus"), #imageLiteral(resourceName: "dubai1")] 
    for i in 0..<imageArray.count { 
     let imageView = UIImageView() 
     imageView.contentMode = .scaleAspectFit 
     imageView.image = imageArray[i] 
     let xPosition = self.view.frame.width * CGFloat(i) 
     imageView.frame = CGRect(x: xPosition, y: 0, width: self.view.frame.width, height: self.mainScrollView.frame.height) 

     mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1) 
     mainScrollView.addSubview(imageView) 
    } 
    for i in 0..<imageArray.count { 
     if (i >= 2) { 
      imageArray.remove(at: (i - 2)) 
     } 
    } 

    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 

谢谢老乡们,更好的程序员。

+0

我真的不明白你在这里做什么。你能再解释一下吗?这是你的所有代码吗? –

+0

几乎是啊,用户拖动图像后,他们只是轻扫一下图像应该删除,但我做了2个图像,而不是最后一个图像 –

+0

因此,基本上你想删除视图的图像,以便用户不能回滚到它?如果是这样,你怎么检测这一切?代码在哪里查找用户何时滚动浏览图像,以便删除它? –

回答

0

你不能从一个阵列,同时在穿越它,所以你必须使用一个临时的阵列上

class ViewController: UIViewController { 

var imageArray = [UIImage]() 

@IBOutlet weak var mainScrollView: UIScrollView! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    mainScrollView.frame = view.frame 
    imageArray = [#imageLiteral(resourceName: "dubai6"), #imageLiteral(resourceName: "dubai2"), #imageLiteral(resourceName: "dubai7"), #imageLiteral(resourceName: "dubai4"), #imageLiteral(resourceName: "dubai3"), #imageLiteral(resourceName: "dubai5"), #imageLiteral(resourceName: "DigitalDrawingPreview"), #imageLiteral(resourceName: "denarus"), #imageLiteral(resourceName: "dubai1")] 
    for i in 0..<imageArray.count { 
     let imageView = UIImageView() 
     imageView.contentMode = .scaleAspectFit 
     imageView.image = imageArray[i] 
     let xPosition = self.view.frame.width * CGFloat(i) 
     imageView.frame = CGRect(x: xPosition, y: 0, width: self.view.frame.width, height: self.mainScrollView.frame.height) 

     mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1) 
     mainScrollView.addSubview(imageView) 


    } 
    let tempArr = imageArray 
    for i in 0..<tempArr.count { 
     if (i >= 2) { // Breakpoint here 
      imageArray.remove(at: (i - 2)) 
     } 

    } 

    // Do any additional setup after loading the view, typically from a nib. 
} 



override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 
} 

使用步骤要经过for循环的每一行,直到它崩溃删除元素,然后打印我当时的价值,通过悬停光标在它或键入命令在控制台po i并输入 enter image description here

+0

嗯瓦伦纳哈里亚,即时通讯仍然收到错误:致命错误:索引超出范围;并且该错误似乎在imageArray.remove(at;(i - 2))行上。 –

+0

在for循环上放置一个断点,并检查它抛出错误的条件 –

+0

http://imgur.com/a/O0C2d Varun Naharia,这似乎指向循环。 –