iOS 는 감지 없 이 더 많은 기능 을 끌 어 올 리 는 사고 와 방법 을 실현 합 니 다.

감지 없 이 더 많이 끌 어 올 리 는 것 이 무엇 입 니까?
감지 되 지 않 는 것 이 무엇 인지 이해 합 니 다.네트워크 상황 이 정상 적 인 상황 에서 사용자 가 목록 을 연속 적 으로 올 릴 때 이 목록 은 끊 김 없 이 새로운 데 이 터 를 다시 볼 수 있 습 니 다.
체험 하려 면 웹 엔 드 는 이미 해 냈 습 니 다.예 를 들 어 금 을 파 는 첫 페이지,그리고 i 금 을 파 는 iOS 의 App,목록 은 모두 감지 되 지 않 습 니 다.
말하자면 부 끄 럽 습 니 다.이렇게 오랫동안 코드 를 썼 는데 이 기능 이 어떻게 실현 되 는 지 정말 진지 하 게 생각 하지 않 았 습 니 다.
어떻게 감지 없 이 더 많은 로드 를 실현 합 니까?
나 는 이 네티즌 의 댓 글 을 보 자마자 생각 하기 시작 했다.
내 가 보기에 아래 의 몇 가지 착수 점 이 있다.
  • 목록 이 미 끄 러 질 때 구체 적 으로 미 끄 러 지 는 위 치 를 어떻게 알 고 인터페이스 요청 을 촉발 하여 더 많은 데 이 터 를 추가 합 니까?
  • UIScrollView 의 프 록 시 리 셋 에서 scrollView 의 위치(contentOffset)크기(contentSize)와 밀접 한 관 계 를 가 진 리 셋 을 찾 습 니 다.
  • 인터넷 에서 비교적 성숙 한 사고 가 있 습 니까?
  • 이 선 을 따라 나 는 먼저 UI Scroll View Delegate 의 소스 코드 를 보 러 달 려 갔다.
    
    public protocol UIScrollViewDelegate : NSObjectProtocol {
    
        
        @available(iOS 2.0, *)
        optional func scrollViewDidScroll(_ scrollView: UIScrollView) // any offset changes
    
        @available(iOS 3.2, *)
        optional func scrollViewDidZoom(_ scrollView: UIScrollView) // any zoom scale changes
    
        .
        .
        .
        .
        .
        .
        ///     ,       ,      。
    }
    
    결론 을 직접 내 려 보 세 요.한 바퀴 봤 는데 어차피 콘 텐 츠 사이즈 나 위치 와 관련 된 리 셋 대리 가 없어 요.scrollView Did Scroll 이라는 리 셋 에 서 는 scrollView 를 알 수 있 지만 우리 가 필요 로 하 는 정 보 는 아직 구체 적 이지 않 습 니 다.
    생각:UIScrollViewDelegate 의 대리 가 기 존의 대리 반전 이 없 으 니 KVO 로 직접 감청 해 볼 까요?
    인터넷 의 사고(1)
    내 가 생각 하 는 동시에 나 도 인터넷 에서 이 기능 을 실현 하 는 답 이 필요 하 다.나중에 이런 생각 을 보 게 한다.
    실현 방법 은 간단 합 니 다.tableView 의 대리 방법 을 사용 하면 쉽게 실현 할 수 있 습 니 다.-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableView Cell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath 가 바로 이 방법 입 니 다.사용자 정의 로 cell 을 표시 합 니 다.이 방법 은 그다지 상용 되 지 않 는 다.그러나 이 방법 은 모든 cell 이 처음 나타 날 때 촉발 할 수 있다.그리고 현재 페이지 의 몇 번 째 cell 이 나타 날 때 더 많은 데 이 터 를 불 러 오 라 고 요청 할 수 있 습 니 다.
    내 가 본 후에 태 블 릿 뷰 의 대 리 를 하나 더 쓰 면 KVO 를 쓰 는 것 보다 코드 가 적 을 거 라 고 생각 했 습 니 다.먼저 시험 해 보고 다시 이야기 하 겠 습 니 다.그래서 코드 를 훑 었 습 니 다.
    
    extension SwiftCoinRankListController: UITableViewDelegate {
        
        func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
            let row = indexPath.row
            let distance = dataSource.count - 25
            print("row: \(row), distance:\(distance)  ")
            if row == distance {
                loadMore()
            }
        }
    }
    
    이 코드 는 원본 프로젝트 의 Swift CoinRankListController.swift 파일 에서 구체 적 인 논 리 를 볼 수 있 습 니 다.주로 cell 에 표 시 된 개 수 를 통 해 데 이 터 를 불 러 오 라 고 미리 요청 한 다음 효 과 를 봅 니 다.

    Gif 가 괜찮아 보일 수도 있 습 니 다.저 는 디 버 깅 을 한 느낌 이 라 고 말 했 습 니 다.위 에서 당 기 는 것 을 감지 하지 못 했 지만 손 이 미 끄 러 지 는 속도 가 비교적 빠 를 때 새로운 데이터 가 돌아 오지 않 으 면 밑 에서 잠시 기다 릴 것 입 니 다.
    기능 은 달 성 했 지만 느낌 은 좋 지 않 았 고 역시 감청 의 섬세 함 이 부족 했다.
    인터넷 의 사고(2)
    그리고 계속 검색 하 는 과정 에서 나 는 다른 방안 을 보 았 다.
    새로 고침 을 하려 면 새 데 이 터 를 미리 불 러 와 야 할 때 가 많 습 니 다.이때 MJrefresh AutoFooter 의 속성 trigger Automaticaly Refresh Percent 를 이용 하여 이 속성 을 실현 할 수 있 습 니 다.이 속성 trigger Automaticaly Refresh Percent 의 기본 값 은 1 이 고 0 으로 바 꾸 면 끝까지 그 으 면 자동 으로 새로 고침 되 고-1 로 바 뀌 면 끝까지 그 을 때 44px 가 자동 으로 새로 고침 됩 니 다.
    MJRefresh?MJrefreshAutoFooter 를 사용 하 십시오.이것 은 간단 합 니 다.기본 클래스 의 footer 를 직접 교체 하면 됩 니 다.이 코드 는 오픈 소스 프로젝트 의 BaseTable View Controller.swift 파일 에서 볼 수 있 습 니 다.
    
    ///         ,          
    let footer = MJRefreshAutoFooter()
    footer.triggerAutomaticallyRefreshPercent = -1
    tableView.mj_footer = footer
    
    효과 다시 보기:

    직접 소감 을 말 하 다.
    코드 의 변동 성 이 적 고 작성 이 간단 하 며 기대 하 는 효 과 를 얻 으 며 비 뚤 어 집 니 다.방안 보다 더욱 매 끄 럽 고 체험 이 좋다.
    여기까지 기능 이 실현 된다 면 설마 끝 이 겠 는가?
    물론 입 니 다.아 닙 니 다.소스 코드 를 보 러 갑시다.
    MJrefresh 코드 의 추적 소스
    우선 MJrefresh AutoFooter.h 파일 을 봅 시다.

    여기에 전문 적 인 속성 trigger Automaticaly Refresh Percent 가 있 습 니 다.자동 새로 고침 을 하 러 갑 니 다.그럼 MJrefresh AutoFooter.m 에 가 보 겠 습 니 다.

    주의 하 세 요.이.m 파일 은-(void)scrollView Content Offset Did Change:(NSDictionary*)change 방법 이 있 고 슈퍼 도 호출 되 었 습 니 다.이 방법 이름 에서 scrollView 의 contentOffset 이 변 할 때 리 셋 하 는 감청 을 뚜렷하게 얻 을 수 있 습 니 다.우 리 는 덩굴 을 따라 참 외 를 만 져 서 슈퍼 가 무엇 인지,새로운 발견 이 있 는 지 보 자.

    소스 코드 를 살짝 따라 가면 MJrefresh AutoFooter 의 계승 관 계 는 다음 과 같 습 니 다.
    MJRefreshAutoFooter => MJRefreshFooter => MJRefreshComponent
    그래서 이 슈퍼 호출 은 MJrefresh Component.m 안 으로 들 어가 보 겠 습 니 다.

    위의 캡 처 를 통 해 우 리 는 아래 의 정보 와 결론 을 얻 을 수 있다.
  • MJrefreshComponent 는 KVO 를 통 해 scrollView 의 contentOffset 변 화 를 감청 하 는 것 으로 사고방식 이 일치 합 니 다.
  • 이 유형 은 구체 적 인 방법 을 실현 하지 않 고 하위 클래스 에 맡 기 는 것 이다.이 점 은 MJrefresh Component.h 의 주석 을 보면 다음 과 같다.
  • MJrefreshComponent 는 본질 적 으로 허 기류 와 비슷 하 다.
  • 총결산
    만약 에 네티즌 들 이 이 문 제 를 제기 하지 않 았 다 면 저 는 이 기능 을 자세히 연구 하지 않 았 을 것 입 니 다.아마도 일반적인 것 을 계속 사용 해서 일반적인 것 을 더 많이 끌 어 올 리 면 충분 할 것 입 니 다.
    이번 실천 은 사실 사고 에서 방법 을 찾 고 마지막 에 소스 코드 로 읽 는 것 이다.
    생각 하 는 것 이 어렵 지 않 을 지 모 르 지만 진정 으로 조금씩 기능 을 실현 하고 보완 하 는 것 이 쉽 지 않 습 니 다.이번에 도 저 는 MJrefresh 라 는 바퀴 를 계속 사 용 했 을 뿐 입 니 다.
    여기 서 iOS 가 감지 되 지 않 고 더 많은 기능 을 끌 어 올 리 는 사고 와 방법 에 관 한 글 을 소개 합 니 다.더 많은 관련 iOS 에 더 많은 내용 을 끌 어 올 리 려 면 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
    참고 문장
  • iOS 목록 에서 데 이 터 를 자동 으로 불 러 오 는 문제
  • MJrefresh 팁(위 당 김 미리 리 셋)
  • 좋은 웹페이지 즐겨찾기