iOS實(shí)現(xiàn)動(dòng)態(tài)元素的引導(dǎo)圖效果
前言
最近越來(lái)越多的APP,已經(jīng)拋棄掉第一次進(jìn)入的3-4頁(yè)的導(dǎo)入頁(yè)面,而是另外采取了在功能頁(yè)面懸浮一個(gè)動(dòng)態(tài)效果來(lái)展示相應(yīng)的功能點(diǎn)。這個(gè)模塊主要是實(shí)現(xiàn)app首次進(jìn)入時(shí)顯示的動(dòng)態(tài)的引導(dǎo)圖,在用戶(hù)進(jìn)行右滑或者左滑的時(shí)候,屏幕上的一些元素做出相應(yīng)的隱藏消失以及位置移動(dòng)。
實(shí)現(xiàn)效果:
圖片資源來(lái)自網(wǎng)絡(luò),侵權(quán)即刪
先來(lái)看看是如何使用的,然后再介紹相關(guān)的方法及屬性
NSMutableArray * elementsDataArr = [[NSMutableArray alloc] init]; /* 動(dòng)畫(huà)元素的創(chuàng)建 */ LMJAnimatedElement * element1 = [[LMJAnimatedElement alloc] initWithImage:[UIImage imageNamed:@"umbrella"]]; element1.belongToScreen = 0; // 設(shè)置所屬第幾屏 element1.size = CGSizeMake(64, 64); // 元素大小 element1.startPoint = CGPointMake(130, 420); // 元素在屏幕的起始點(diǎn)位置 element1.endPoint = CGPointMake(130, 420); // 元素在屏幕的終點(diǎn)位置 element1.isGradient = NO; // 是否淡入淡出 [elementsDataArr addObject:element1]; LMJAnimatedElement * element2 = [[LMJAnimatedElement alloc] initWithImage:[UIImage imageNamed:@"cocktail"]]; element2.belongToScreen = 1; element2.size = CGSizeMake(64, 64); element2.startPoint = CGPointMake(40, 350); element2.endPoint = CGPointMake(40, 480); element2.isGradient = YES; [elementsDataArr addObject:element2]; LMJAnimatedElement * element3 = [[LMJAnimatedElement alloc] initWithImage:[UIImage imageNamed:@"flip_flops"]]; element3.belongToScreen = 2; element3.size = CGSizeMake(64, 64); element3.startPoint = CGPointMake(-70, 500); element3.endPoint = CGPointMake(190, 470); element3.isGradient = YES; [elementsDataArr addObject:element3]; LMJAnimatedElement * element4 = [[LMJAnimatedElement alloc] initWithImage:[UIImage imageNamed:@"surfboard"]]; element4.belongToScreen = 3; element4.size = CGSizeMake(96, 96); element4.startPoint = CGPointMake(300, 440); element4.endPoint = CGPointMake(40, 440); element4.isGradient = NO; [elementsDataArr addObject:element4]; LMJAnimatedElement * element5 = [[LMJAnimatedElement alloc] initWithImage:[UIImage imageNamed:@"beach_chair"]]; element5.belongToScreen = 4; element5.size = CGSizeMake(64, 64); element5.startPoint = CGPointMake(320, 440); element5.endPoint = CGPointMake(220, 440); element5.isGradient = YES; [elementsDataArr addObject:element5]; /* 模塊的實(shí)現(xiàn) */ _welcomeView = [[LMJDynamicWelcomeView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.height)]; // 設(shè)置動(dòng)畫(huà)元素 [_welcomeView setAnimatedItems:elementsDataArr]; // 設(shè)置背景圖片,以及背景圖片的尺寸,當(dāng)圖片尺寸超過(guò)屏幕寬度時(shí),會(huì)自動(dòng)計(jì)算背景圖每屏的位移量,以致滑到最后一屏的時(shí)候,背景圖移到最右端 [_welcomeView setBackgroundImage:[UIImage imageNamed:@"beach_bg.png"] size:CGSizeMake(_welcomeView.frame.size.height/620.f*992.f, _welcomeView.frame.size.height)]; // 設(shè)置滑動(dòng)屏數(shù) [_welcomeView setAnimatedPageCount:5]; [self.view addSubview:_welcomeView];
首先來(lái)看元素類(lèi),也就是在引導(dǎo)圖上移動(dòng)的元素 (LMJAnimatedElement)
- (LMJAnimatedElement *)initWithImage:(UIImage *)image; // - (LMJAnimatedElement *)initWithText:(NSString *)text; // 該功能尚未實(shí)現(xiàn),敬請(qǐng)期待... @property (nonatomic,assign) NSInteger belongToScreen; // 屬于第幾屏 (取值范圍:0~...) @property (nonatomic,assign) CGSize size; // 元素大小 @property (nonatomic,assign) CGPoint startPoint; // 動(dòng)畫(huà)起點(diǎn) @property (nonatomic,assign) CGPoint endPoint; // 動(dòng)畫(huà)終點(diǎn) @property (nonatomic,assign) BOOL isGradient; // 是否有漸變效果 當(dāng)設(shè)置為YES時(shí),動(dòng)畫(huà)元素只有在所屬頁(yè)跟隨動(dòng)畫(huà)出現(xiàn);當(dāng)設(shè)置為NO時(shí),動(dòng)畫(huà)元素會(huì)一直在屏幕顯示,只在其所屬頁(yè)移動(dòng) @property (nonatomic,strong) UIView * elementView; // 元素容器
再來(lái)看一下該模塊的方法(LMJDynamicWelcomeView)
/* 設(shè)置所有動(dòng)畫(huà)元素 */ - (void)setAnimatedItems:(NSArray<LMJAnimatedElement *> *)items; /* 設(shè)置引導(dǎo)圖滑動(dòng)的屏數(shù) */ - (void)setAnimatedPageCount:(NSInteger)count; /* 設(shè)置背景圖以及背景圖的大小 */ - (void)setBackgroundImage:(UIImage *)image size:(CGSize)size;
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望能對(duì)各位iOS開(kāi)發(fā)者們能有所幫助,如果有疑問(wèn)大家可以留言交流。
- 簡(jiǎn)潔易用的iOS引導(dǎo)頁(yè)制作
- Android實(shí)現(xiàn)繞球心旋轉(zhuǎn)的引導(dǎo)頁(yè)效果
- iOS App引導(dǎo)頁(yè)開(kāi)發(fā)教程
- iOS 引導(dǎo)頁(yè)的鏤空效果實(shí)例
- Android開(kāi)發(fā)實(shí)戰(zhàn)之漂亮的ViewPager引導(dǎo)頁(yè)
- RxJava兩步打造華麗的Android引導(dǎo)頁(yè)
- Android使用ViewPager實(shí)現(xiàn)啟動(dòng)引導(dǎo)頁(yè)
- iOS App初次啟動(dòng)時(shí)的用戶(hù)引導(dǎo)頁(yè)制作實(shí)例分享
- jQuery插件pagewalkthrough實(shí)現(xiàn)引導(dǎo)頁(yè)效果
- iOS基于UIScrollView實(shí)現(xiàn)滑動(dòng)引導(dǎo)頁(yè)
相關(guān)文章
ios學(xué)習(xí)筆記之基礎(chǔ)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換
在編碼過(guò)程中,數(shù)據(jù)的處理是必要的。眾多數(shù)據(jù)中,NSString、NSData、NSArray、 NSDictionary等數(shù)據(jù)類(lèi)型是常用的,對(duì)付它們?nèi)菀?,但是在多個(gè)數(shù)據(jù)類(lèi)型之間轉(zhuǎn)換就需要技巧了。本文主要給大家介紹ios中基礎(chǔ)數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,有需要的下面來(lái)一起看看吧。2016-11-11簡(jiǎn)單介紹iOS開(kāi)發(fā)中關(guān)于category的應(yīng)用
這篇文章主要介紹了iOS開(kāi)發(fā)中關(guān)于category的應(yīng)用,代碼仍然基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-09-09詳解iOS多線程之2.NSThread的加鎖@synchronized
這篇文章主要介紹了詳解iOS多線程之2.NSThread的加鎖@synchronized,有需要的小伙伴可以參考下。2016-11-11iOS移動(dòng)端軟鍵盤(pán)彈起空白和滾動(dòng)穿透問(wèn)題解決方案
這篇文章主要為大家介紹了iOS移動(dòng)端軟鍵盤(pán)彈起空白和滾動(dòng)穿透問(wèn)題解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07iOS開(kāi)發(fā)實(shí)現(xiàn)搜索框(UISearchController)
這篇文章主要為大家詳細(xì)介紹了iOS開(kāi)發(fā)實(shí)現(xiàn)搜索框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08ios12中遇到的帶input彈窗的錯(cuò)位問(wèn)題的解決方法
這篇文章主要介紹了ios12中遇到的帶input彈窗的錯(cuò)位問(wèn)題的解決方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05iOS UITableView 拖動(dòng)排序?qū)崿F(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了iOS UITableView 拖動(dòng)排序?qū)崿F(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09IOS React Native FlexBox詳解及實(shí)例
這篇文章主要介紹了IOS React Native FlexBox詳解的相關(guān)資料,并附實(shí)例代碼,需要的朋友可以參考下2016-11-11