컴퓨터 지식 네트워크 - 컴퓨터 프로그래밍 - VVeboTableViewDemo에서 YYAsyncLayer로(1)

VVeboTableViewDemo에서 YYAsyncLayer로(1)

나는 VVeboTableViewDemo에 대해 오랫동안 알고 있었고 항상 그것을 연구하고 싶었습니다. 최근에 마침내 Swift(VVeboTableViewDemo.swift)에서 VVeboTableViewDemo를 만들 시간이 생겼습니다. iOS 최적화에 관한 기사를 한 번 이상 읽은 후 최적화 포인트 요약이 매우 흩어져 있고 대부분이 나와 같은 초보자에게는 적합하지 않다는 것을 알았습니다.

이런 질문:

먼저 VVeboTableViewDemo의 구조를 살펴보세요(Swift로 번역했으므로 아래에서는 Swift 버전을 사용하여 분석해 보겠습니다. 원본 버전의 로직과 일치합니다.)

그 중 DataPrenstenter는 VVeboTableView에서 추출되므로 실제로 데이터를 읽어오므로 걱정할 필요가 없습니다.

위 사진은 VVeboLabel의 모든 내용입니다. 강조된 방식이 VVeboLabel의 핵심입니다.

이것은 주로 라인 단위 그리기를 사용하여 텍스트를 특수 처리하는 Core Text 기술에 속합니다.

다른 방법은 주로 텍스트 강조 표시 및 내용 지우기를 위한 것입니다. 그건 초점이 아니야.

VVeboTableViewCell에서는 강조 표시된 메소드가 핵심 부분입니다. 실제로 아이디어는 그림에 콘텐츠를 비동기적으로 그린 ​​다음 표시하여 혼합을 줄이고 GPU 부담을 줄이는 VVeboLabel과 정확히 동일합니다. 소스코드는 올리지 않겠습니다만, 데모는 아래 공개하겠습니다.

이 수업은 매우 영리하게 설계된 수업입니다. 이 수업의 아이디어를 연구하기 전에 이 기사를 읽어 보시기 바랍니다. 물론, UIScrollView와 이 메서드 func scrollViewWillEndDragged(_ scrollView: UIScrollView, withVelocity speed: CGPoint, targetContentOffset: UnsafeMutablePointer)에 충분히 익숙하다면 VVeboTableView의 아이디어는 한 눈에 명확해질 것입니다.

이 메소드는 iOS 5부터 도입되었으며 didEndDragged 이전에 호출됩니다. willEndDragged 메소드의 속도가 CGPoin.zero인 경우(드래그가 끝날 때 양방향 속도가 없음), didEndDraging의 감속도는 false입니다. 즉, 감속 프로세스가 없으며 willBeginDecelerating 및 didEndDecelerate가 호출되지 않습니다. 반대로 속도가 CGPoin.zero가 아닌 경우 스크롤 뷰는 속도를 초기 속도로 사용하고 targetContentOffset까지 감속합니다. 여기서 targetContentOffset이 포인터라는 점은 주목할 가치가 있습니다. 예, 감속 이동의 대상을 변경할 수 있으며 이는 일부 효과를 구현할 때 매우 유용합니다.

위 텍스트 소스

UICollectionViewFlowLayout을 다시 작성하는 것 외에도 targetContentOffset을 제어하여 WeChat 읽기의 수평 슬라이딩 센터링 효과를 얻을 수도 있습니다.

강조 표시된 방법 그림은 핵심 부분입니다

셀 그리기 판단 로직

위의 VVeboTableViewDemo 소스 코드는 완전히 구문 분석되었으므로 작성자의 독창적인 아이디어에 감탄하는 동안 이 기술의 유래와 개선과정을 알고 싶습니다. (아래 내용은 개인적인 추측입니다.)

이 글을 통해서 Core Text, Core Graphics, Hit-Test View, Asynchronous Drawing을 이해하셔야 한다고 생각합니다. . 기술, 비동기 그리기 다음 섹션 YYAsyncLayer 소스 코드 분석에서는 여러분도 모르게 이 기술을 마스터하게 될 것이라고 믿습니다.

원본 소스

이 기술은 레이어 혼합이 GPU에 의해 이루어지기 때문에 GPU에 대한 부담을 줄이는 것으로 나타납니다. 여기서 CPU는 거의 할 일이 없습니다. 요구사항을 완료하기 위해 CPU의 func draw(_ ret: CGRect)에 GPU를 믹싱합니다.

이 기술의 빠른 스크롤 데모

기술 노후화 이유

레티나 스크린의 등장으로 인해 단위 면적당 픽셀 수가 증가했으며, CPU가 수행하는 작업도 너무 많으면 subViews 방법보다 효율성이 떨어집니다.

AsyncDisplayKit YYKit과 같은 새로운 기술의 등장

VVeboTableViewDemo의 출현도 위의 과정을 따라야 한다고 생각합니다.

핵심 텍스트:

Swift CoreText 조판 아티팩트

공식 문서

Core Graphics:

iOS 그리기 튜토리얼

Swift: Core Graphics에 대해 알아야 합니다.

공식 데모

공식 데모 Swift 버전

iOS에서 동시 사용자 인터페이스 구축

응답 체인

iOS 이벤트 응답 체인 적중 테스트 보기 적용

iOS 이벤트 처리

비동기 그리기

/ios-concurrency/

上篇: Wuhua 경제 개발구는 어느 지역에 속합니까? 下篇: 콘센트 스위치가 꺼져 있어도 컴퓨터에 계속 전원이 공급됩니까?
관련 내용