-
Notifications
You must be signed in to change notification settings - Fork 0
Description
사진 업로드 기능 처리하는 문제중 CollectionView VS StackView "어느것을 사용해야 할까?" 고민이 있었다.
StackView 선택한 이유는
- 자동 레이아웃 관리: StackView는 UI 요소들을 자동으로 배열하고, 그 크기를 조정하는 기능을 제공한다. 사진을 3장까지 업로드하는 기능에서는 여러 사진을 일정한 간격으로 배치해야 하는데, 이를 StackView가 자동으로 처리해줌으로 레이아웃에 대한 복잡한 계산이나 조정을 하지 않아도 됐다.
- 동적인 UI 변화 처리: StackView는 UI의 변화를 쉽게 처리할 수 있다. 예를 들어, 사용자가 사진을 추가하거나 삭제할 때마다 UI가 자동으로 업데이트된다. 이는 코드의 복잡성을 줄이고, 사용자 편리한 경험을 제공한다.
- 코드의 간결성: StackView를 사용하면, 여러 UI 요소를 관리하는 데 필요한 코드를 크게 줄일 수 있다. 각 사진에 대해 개별적으로 레이아웃을 설정하는 대신, StackView는 한 번에 모든 요소를 관리한다.
- 유연성: StackView는 수평, 수직, 정렬, 간격 등 다양한 레이아웃 옵션을 제공한다. 이를 통해 향후 다양한 디자인 요구사항을 충족시킬 수 있다.
이러한 이유로 StackView를 사용하여 사진 업로드 기능을 구현한 것이며, 이를 통해 코드의 간결성을 유지하고, 동적인 UI 변화를 효과적으로 처리할 수 있었다.
extension AddCommunityPageViewController: PHPickerViewControllerDelegate { func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) { if !results.isEmpty { selectedImages = [] results.forEach { result in let itemProvider = result.itemProvider if itemProvider.canLoadObject(ofClass: UIImage.self) { itemProvider.loadObject(ofClass: UIImage.self) { [weak self] image, error in guard let self = self else { return } if let image = image as? UIImage { self.selectedImages.append(image) DispatchQueue.main.async { // 사진 1-3장 순서대로 나열(0,1,3 순서대로) self.addCommunityPageView.imagePickerView.image = self.selectedImages[0] self.addCommunityPageView.numberOfSelectedImageLabel.text = "\(self.selectedImages.count)" self.addCommunityPageView.imagePickerStackView.removeArrangedSubview(self.addCommunityPageView.secondImageView) self.addCommunityPageView.imagePickerStackView.removeArrangedSubview(self.addCommunityPageView.thirdImageView) self.addCommunityPageView.secondImageView.removeFromSuperview() self.addCommunityPageView.thirdImageView.removeFromSuperview() switch self.selectedImages.count { case 2: self.addCommunityPageView.imagePickerStackView.addArrangedSubview(self.addCommunityPageView.secondImageView) self.addCommunityPageView.secondImageView.image = self.selectedImages[1] case 3: self.addCommunityPageView.imagePickerStackView.addArrangedSubview(self.addCommunityPageView.secondImageView) self.addCommunityPageView.imagePickerStackView.addArrangedSubview(self.addCommunityPageView.thirdImageView) self.addCommunityPageView.secondImageView.image = self.selectedImages[1] self.addCommunityPageView.thirdImageView.image = self.selectedImages[2] default: break } } } if error != nil { print("ERROR") } } } } } dismiss(animated: true) } }
