2015-08-03 2 views
1

Я работаю над приложением, чтобы делать выгружаемые фотографии внутри scrollViews, например, в приложении для фотографий, чтобы прокрутить вправо, чтобы получить старые фотографии и проведите по экрану влево, чтобы получить новые фотографии до конца фото.Динамически работайте с массивом UIImage

Хорошо, так что я получаю фотографии как мульти-diminutional из Интернета:

imageArray[indexPath.row][0] as? String 

Вот в ViewController1, чтобы показать все изображения в CollectionView.

Когда пользователь нажимает на фотографию, я делаю segue и показываю изображение больше в ViewController2, поэтому, если проведите по экрану слева, вы увидите новые фотографии и справа, чтобы показать старые фотографии, которые хранятся в массиве.

, но мне нужно тайному мой двумерный массив в один и использовать его динамически, чтобы быть что-то вроде этого:

pageImages = [UIImage(named:"photo1.png")!, 
    UIImage(named:"photo2.png")!, 
    UIImage(named:"photo3.png")!, 
    UIImage(named:"photo4.png")!, 
    UIImage(named:"photo5.png")!] 

, как это можно сделать?

я мог бы сказать, как:

pageImages = [UIimage(named:thewholearray)]?

я попытался первым, чтобы преобразовать в один-diminutional массив, но я не смог:

var imageArray : NSArray = [] 

var mybigarray : NSArray = [] 
    for (var i=0; i<=self.imageArray.count; i++) { 

     self.mybigarray = self.imageArray[i][0] as! NSArray 

    } 

которые генерируют эту ошибку произнесения:

Could not cast value of type '__NSCFString' (0x196806958) to 'NSArray' (0x196807308). 

ответ

1

Вы можете использовать карту-функцию, чтобы извлечь имена изображений из вашего многомерного массива.

var imageNames:[String] = imageArray.map({ 
    $0[0] as! String 
}) 

Функция карты выполняет итерацию через все записи массива, такие как in-in-loop. Заявление в закрытии определяет новую запись вашего массива imageNames.

EDIT:

Если вы не используете Swift-Массивы:

var imageNames:NSMutableArray = [] 
for image in imageArray{ 
    imageNames.addObject(image[0] as! String) 
} 
+0

NSArray не имеет члена, называемого картой? – AaoIi

+0

Я отредактировал мой ответ –

+0

Отлично, последнее, если мне нужно использовать imageNames как массив UIImage в качестве моего вопроса, как это можно сделать? – AaoIi

0

Я смотрел на учебник, и я думаю, что это поможет с ответом от Даниила. Сохраните ответ Даниила и используйте URL-адреса из массива с расширением.
Добавить это создать вам изображения из URL

extension UIImageView { 
    public func imageFromUrl(urlString: String) { 
     if let url = NSURL(string: urlString) { 
      let request = NSURLRequest(URL: url) 
      NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) { 
       (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
       if data != nil { 
        self.image = UIImage(data: data) 
       } 
       else { 
        self.image = UIImage() 
       } 
      } 
     } 
    } 
} 

Используйте это в PagedImageScrollViewController:

newPageView.imageFromUrl(pageImages[page]) 

pageImages Ваш массив строк.

+0

Конечно, я сохраню его, я использую библиотеку SDWebImage для показа изображений, так как это возможно сделать без расширения? https://github.com/rs/SDWebImage, я попытался сделать, как 'let newPageView = UIImageView (image: pageImages [page] as! UIImage) newPageView.sd_setImageWithURL (url)', но он говорит: 'Не могу отличить значение введите '__NSCFString' (0x196806958) в 'UIImage' (0x19746a698) .' – AaoIi

+0

Извините, я не знаком с библиотекой SDWebImage. Ошибка выглядит так, потому что ваш pageImages - это массив строк, и вы пытаетесь установить String на изображение. Через некоторое время я могу заглянуть в библиотеку SDWebImage, если вы не можете получить решение. Может быть, вы можете манипулировать расширением в соответствии с вашими потребностями? – Caleb

Смежные вопросы