프로그래밍 방식으로 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)
}
}
내가 링크 된 질문을 검토했습니다. 나는이 일에 익숙하지 않고 여전히 혼란 스럽다. 내 하위 클래스에 무엇을 넣어야합니까? 응용 프로그램의 목표는 사용자가 응용 프로그램의 다른 부분에 업로드 한 그림의 UICollectionView를 만드는 것입니다. – Allie
하위 클래스에는 UIImageView가 포함됩니다. 하위 클래스는 UIImageView를 내용보기의 하위보기로 추가하며 UIImageView의 크기를 제공해야합니다. 그런 다음 cellForRowAtIndexPath에서 적절한 UIImage를 셀의 UIImageView에 연결합니다. –
이 튜토리얼은 꽤 좋아 보입니다. https://randexdev.com/2014/08/uicollectionviewcell/ –