매일 공부 일기

(2022-11-17) 소소한 개발 일기

HJ39 2022. 11. 17. 15:36

-오늘 한일

 

# 컴퓨터 응용 설계 팀프로젝트

 

1. 어제 미완성한 CollectionView 만들기

collectionview에 이미지를 넣었을 때 tag로 하려 했지만 잘 작동하지 않아서 다른 방식으로 변환하였다.

 

customCollectionView를 사용하기 때문에 collectionCell class를 만들어서 cell 내부에 들어가는 UI들을 제어할 수 있게 되었다.

class CustomCollectionCell: UICollectionViewCell {
    @IBOutlet var imgAd: UIImageView!   //CollectionViewCell 내부에 있는 imageView
}

UICollectionViewCell을 상속받는 클래스로 내부에 하나 뿐인 imageView를 넣었다.

이때 CollectionView의 Estimate를 none으로 사진을 가득 채우기 위해 Min Spacing을 전부 0으로 설정하였다.

CollectionView 크기는 constraints를 이용하여 다른 UI들과 Autolayout을 적용시켰다.

 

CollectionView를 Controller에 적용시키는 코드

extension SecondViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return adArray.count
    }
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let collectionCell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCollectionCell", for: indexPath) as! CustomCollectionCell
        collectionCell.imgAd.image = UIImage(named: adArray[indexPath.row])
        return collectionCell
    }
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let width: CGFloat = collectionView.frame.width //collectionview의 가로 길이
        let height: CGFloat = collectionView.frame.height   //collectionview의 세로 길이
        return CGSize(width: width, height: height)
    }
    
}

adArray는 Assest에 저장된 이미지들의 이름이다.

맨 마지막 함수에서 CGSize를 이용하여 cell의 크기를 collectionview 가득차게 만들어 주었다.

 

이제 남은건 자동으로 사진이 교차되도록 하는 것..!

 

일정 시간이 지나면 자동적으로 페이지가 넘어가지게 끔 하기 위해 타이머를 사용하였다.

func timer(){   //광고 타이머
    let _: Timer = Timer.scheduledTimer(withTimeInterval: 3, repeats: true) { (Timer) in
        self.move_Ad_Screen()
    }
}
    
func move_Ad_Screen(){  //타이머 지정 시간마다 다음으로 넘기는 함수
    if nowpage == adArray.count-1 {
        collectionView.scrollToItem(at: NSIndexPath(item: 0, section: 0) as IndexPath, at: .right, animated: true)
        nowpage = 0
        return
    }
    nowpage += 1
    collectionView.scrollToItem(at: NSIndexPath(item: nowpage, section: 0) as IndexPath, at: .right, animated: true)
}

타이머를 이용해서 3초가 되면 move_Ad_Screen을 실행시켜서 다음페이지로 스크롤 되게 해주었다.

 

collectionView 자동 스크롤

만족스럽게 실행이 된다. (삼겹살 맛있겠다...)

 

2. API 받아오는 속도 개선하기

팀프로젝트 팀원의 조언을 받았다 ..(두둥)

처음 앱을 실행할 때 약간의 API통신을 이용해 조금만 받아오고 tableView의 마지막 cell이 되었을 때 조금씩 추가적으로 정보를 가져오는 방법이 있다고 했다. (신박한 방법!)

 

API 통신 라이브러리 중에 하나인 Alamofire가 있다고 한다 -> 공부해보고 괜찮은거 같으면 적용 시켜야징

 

오늘 개인 공부는 끄읕~!

 

 

#참고한 사이트

  1. https://gonslab.tistory.com/24