1

프로그래밍 방식으로 UICollectionView를 만드는 방법을 배우고 있습니다. 나는 앱의 다른 부분에서 사용자로부터 수집 된 그림 그리드를 만들고 싶다. 이 샘플 코드는이 작업을 수행하는 데 도움이됩니까? 또한 원하는 이미지를 내보내려면 데이터를 어떻게 구성해야합니까? 내 이미지 파일은 아래에 표시되어 있으므로 UICollectionView의 소스 코드도 있습니다.프로그래밍 방식으로 UICollectionView 만들기

UICollectionView :

class PhotosViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 
override func viewDidLoad() { 
    super.viewDidLoad() 
    let imageStore = ImageStore() 
} 

override func viewWillAppear(animated: Bool) { 
    super.viewWillAppear(animated) 

    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() 
    layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10) 
    layout.itemSize = CGSize(width: 100, height: 100) 

    let myCollectionView:UICollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout) 
    myCollectionView.dataSource = self 
    myCollectionView.delegate = self 
    myCollectionView.registerClass(RDCellCollectionViewCell.self, forCellWithReuseIdentifier: "MyCell") 
    myCollectionView.backgroundColor = UIColor.whiteColor() 
    self.view.addSubview(myCollectionView) 
} 

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return images.count 
} 

var images: [UIImage] = [ 

] 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let myCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! RDCellCollectionViewCell 
    myCell.imageView.image = images[indexPath.item] 
    myCell.backgroundColor = UIColor.grayColor() 
    return myCell 
} 

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) 
{ 
    print("User tapped on item \(indexPath.row)") 
} 


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

}

ImageStore.Swift :

class ImageStore: NSObject { 

let cache = NSCache() 

func setImage(image: UIImage, forKey key: String) { 
    cache.setObject(image, forKey: key) 

    let imageURL = imageURLForKey(key) 

    if let data = UIImageJPEGRepresentation(image, 0.5) { 
     data.writeToURL(imageURL, atomically: true) 
    } 
} 
func imageForKey(key: String) -> UIImage? { 
    if let existingImage = cache.objectForKey(key) as? UIImage { 
     return existingImage 
    } 

    let imageURL = imageURLForKey(key) 
    guard let imageFromDisk = UIImage(contentsOfFile: imageURL.path!) else { 
     return nil 
    } 

    cache.setObject(imageFromDisk, forKey: key) 
    return imageFromDisk 
} 

func deleteImageForKey(key: String) { 
    cache.removeObjectForKey(key) 

    let imageURL = imageURLForKey(key) 
    do { 
     try NSFileManager.defaultManager().removeItemAtURL(imageURL) 
    } 
    catch let deleteError { 
     print("Error removing the image from disk: \(deleteError)") 
    } 
} 

func imageURLForKey(key: String) -> NSURL { 
    let documentsDirectories = 
    NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask) 
    let documentDirectory = documentsDirectories.first! 

    return documentDirectory.URLByAppendingPathComponent(key) 
} 

}

답변

0

당신이 올바른 궤도에있어. UIImageView가 포함 된 UICollectionViewCell의 하위 클래스를 만들어야합니다. 이렇게하면 cellForItemAtIndexPath에 올바른 UIImage를 삽입 할 수 있습니다. 올바른 이미지를 얻기에 관해서 Create UICollectionViewCell programmatically without nib or storyboard

, 당신은 품목 번호가 일치하도록, 어떻게 든 이미지 저장소에 인덱스 경로를 매핑해야합니다 :

이 사용자 정의 세포를 연결하는 방법을 설명합니다 올바른 이미지 키.

let myCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) 
myCell.backgroundColor = UIColor.blueColor() 
let imageView = UIImageView(frame: cell.contentView.frame) 
cell.contentView.addSubview(imageView) 
imageView.image = //Here you should get right UIImage like ImageStore().imageForKey("YOUR_KEY") 
return myCell 

또는 여호수아 KADEN가 쓴 사용자 정의 UICollectionViewCell 서브 클래스를 사용할 수 있습니다

+0

내가 링크 된 질문을 검토했습니다. 나는이 일에 익숙하지 않고 여전히 혼란 스럽다. 내 하위 클래스에 무엇을 넣어야합니까? 응용 프로그램의 목표는 사용자가 응용 프로그램의 다른 부분에 업로드 한 그림의 UICollectionView를 만드는 것입니다. – Allie

+0

하위 클래스에는 UIImageView가 포함됩니다. 하위 클래스는 UIImageView를 내용보기의 하위보기로 추가하며 UIImageView의 크기를 제공해야합니다. 그런 다음 cellForRowAtIndexPath에서 적절한 UIImage를 셀의 UIImageView에 연결합니다. –

+0

이 튜토리얼은 꽤 좋아 보입니다. https://randexdev.com/2014/08/uicollectionviewcell/ –

0

작업이 이미지를 추가하는 경우, 당신은 cellForItemAtIndexPath이 같은 것을 사용한다.

+0

추가하기 전에 이미지보기의 존재 여부를 확인합니다. 그렇지 않으면 셀이 잠재적으로 재사용되므로 이미지 뷰 위에 이미지보기를 추가 할 수 있습니다. –