iOS 는 감지 없 이 더 많은 기능 을 끌 어 올 리 는 사고 와 방법 을 실현 합 니 다.
감지 되 지 않 는 것 이 무엇 인지 이해 합 니 다.네트워크 상황 이 정상 적 인 상황 에서 사용자 가 목록 을 연속 적 으로 올 릴 때 이 목록 은 끊 김 없 이 새로운 데 이 터 를 다시 볼 수 있 습 니 다.
체험 하려 면 웹 엔 드 는 이미 해 냈 습 니 다.예 를 들 어 금 을 파 는 첫 페이지,그리고 i 금 을 파 는 iOS 의 App,목록 은 모두 감지 되 지 않 습 니 다.
말하자면 부 끄 럽 습 니 다.이렇게 오랫동안 코드 를 썼 는데 이 기능 이 어떻게 실현 되 는 지 정말 진지 하 게 생각 하지 않 았 습 니 다.
어떻게 감지 없 이 더 많은 로드 를 실현 합 니까?
나 는 이 네티즌 의 댓 글 을 보 자마자 생각 하기 시작 했다.
내 가 보기에 아래 의 몇 가지 착수 점 이 있다.
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 안 으로 들 어가 보 겠 습 니 다.
위의 캡 처 를 통 해 우 리 는 아래 의 정보 와 결론 을 얻 을 수 있다.
만약 에 네티즌 들 이 이 문 제 를 제기 하지 않 았 다 면 저 는 이 기능 을 자세히 연구 하지 않 았 을 것 입 니 다.아마도 일반적인 것 을 계속 사용 해서 일반적인 것 을 더 많이 끌 어 올 리 면 충분 할 것 입 니 다.
이번 실천 은 사실 사고 에서 방법 을 찾 고 마지막 에 소스 코드 로 읽 는 것 이다.
생각 하 는 것 이 어렵 지 않 을 지 모 르 지만 진정 으로 조금씩 기능 을 실현 하고 보완 하 는 것 이 쉽 지 않 습 니 다.이번에 도 저 는 MJrefresh 라 는 바퀴 를 계속 사 용 했 을 뿐 입 니 다.
여기 서 iOS 가 감지 되 지 않 고 더 많은 기능 을 끌 어 올 리 는 사고 와 방법 에 관 한 글 을 소개 합 니 다.더 많은 관련 iOS 에 더 많은 내용 을 끌 어 올 리 려 면 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
참고 문장
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.