用drawRect的方式實現一個尺子,drawrect實現尺子

來源:互聯網
上載者:User

用drawRect的方式實現一個尺子,drawrect實現尺子

用drawRect的方式實現了一個尺子選取器,demo在這裡:https://github.com/Phelthas/LXMRulerView效果 如果不考慮複用的問題,我感覺最簡單的實現方式其實是讓美術做一張尺子的圖片,放到scrollView上就可以了,數值可以根據scrollview的contentOffset來計算。如果考慮複用的問題,還是用代碼寫來的方便,封裝一些屬性,就可以實現很多不同的樣式。所以就有了這個LXMRulerView~ 實現方案:目前用的是一個比較笨的實現方案,就是用drawRect的方式畫了一個尺子,然後把這個view放到scrollview上,然後用scrollview的contentOffset來計算數值。有看到資料說用drawRect的方式會比較占記憶體,用CALayer實現會好很多,這個我還沒有試,但目前來看demo裡面記憶體佔用都很小,有空試一下layer的實現方式吧~為什麼說這個方案比較笨呢?因為這裡面其實是完完全全畫了一個完整的尺子,沒有複用任何資源,所以理論上如果尺子很長很長的話,還是會很消耗記憶體的;考慮到尺子也是不斷重複的外觀,只有數字不一樣,所以理論上用一個橫向的collectionView來實現會更好一些,這個有空實踐一下看看效果怎麼樣吧~  需要注意的地方:1,對autoLayout的支援和從xib初始化的支援drawRect是按bounds來畫圖的,而且預設情況下drawRect方法只會調用一次。所以如果從xib初始化,且初始化時的view大小與最終顯示的view大小不同的話,drawRect是按最初初始化的大小來繪製的,不會隨著autoLayout調整大小,所以這裡沒有什麼好的辦法,只能在layoutSubview中手動調整改view的大小。但僅僅調整view大小還不夠,畫好的圖預設不會重新繪製,UIView有一個contentMode屬性,需將其設定為UIViewContentModeRedraw,效果是在view的bounds有變化時,會重新調用drawRect方法。 2,整數吸附效果在scrollviewDidScroll的方法中調整contentOffset來使其停留在整數的位置上的方法太low了!!!會使動畫效果看起來很不連貫怎麼解決呢?就是用 - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inoutCGPoint *)targetContentOffset這個方法,這也是系統提供的delegate方法,所以可以放心用,效果就是可以讓scrollview剛好停留在 targetContentOffset的位置,所以只需要在這個方法中計算出指定的位置就可以了~具體用法參考我之前的部落格(UIScrollView的delegate方法妙用之讓UICollectionView滑動到某個你想要的位置 ) 3,數值變化的回調為了簡單易用,數值變化的回調方法是用block的方式。在用的時候,需要注意一下循環參考的問題,所以block中還是用weakSelf安全一點 4,為了保證滑動位置的準確度,尺子最大最小值和間距都只支援整型,不支援浮點數~~等想到好解決辦法支援~   目前還在持續更新中,有什麼問題歡迎討論~  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.