Skip to content

AddCommunityPage 사진 업로드 CollectionView VS StackView 문제 #195

@gunnieee

Description

@gunnieee

Simulator Screenshot - iPhone14(iOS16 4) - 2023-11-16 at 16 56 55

사진 업로드 기능 처리하는 문제중 CollectionView VS StackView "어느것을 사용해야 할까?" 고민이 있었다.
StackView 선택한 이유는

  1. 자동 레이아웃 관리: StackView는 UI 요소들을 자동으로 배열하고, 그 크기를 조정하는 기능을 제공한다. 사진을 3장까지 업로드하는 기능에서는 여러 사진을 일정한 간격으로 배치해야 하는데, 이를 StackView가 자동으로 처리해줌으로 레이아웃에 대한 복잡한 계산이나 조정을 하지 않아도 됐다.
  2. 동적인 UI 변화 처리: StackView는 UI의 변화를 쉽게 처리할 수 있다. 예를 들어, 사용자가 사진을 추가하거나 삭제할 때마다 UI가 자동으로 업데이트된다. 이는 코드의 복잡성을 줄이고, 사용자 편리한 경험을 제공한다.
  3. 코드의 간결성: StackView를 사용하면, 여러 UI 요소를 관리하는 데 필요한 코드를 크게 줄일 수 있다. 각 사진에 대해 개별적으로 레이아웃을 설정하는 대신, StackView는 한 번에 모든 요소를 관리한다.
  4. 유연성: 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) } }

Metadata

Metadata

Assignees

No one assigned

    Labels

    문서화Improvements or additions to documentation

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions