UIKit之App界面Demo

需求

實現簡單的APP界面
在這里插入圖片描述

功能:

  1. 實現滾動
  2. 實現上層、下層橫欄滾動時穿透效果(永遠浮在表面,不跟著滾動)。暫用UIView代替,還沒學Bar。

分析:

知識點:

  1. 實現鼠標拖動的上下滾動:當把各個帶背景圖的子控件添加到UIScrollView中時,就能。
  2. 上下導航欄沒有參與滾動:它們并不屬于UIScrollView的子控件。
    本質是和UIScrollView同層的視圖,且有不透明度。
    其中的文字,通過UILabel設置,其它API的原理也一樣,都是要通過添加內容到視圖上的方式來設置。
  1. 需要掌握USIScrollView三個屬性的應用:
    1> 可滾動:設置contentSize。若寬度為屏幕寬度則橫向不能滾動,如果高度大于屏幕,則實現滾動。
    2> 初始顯示偏移:如下,要讓橙色別蓋住下面,但是頂層topBar又不是scrollView的子視圖。
    要設置偏移量。需要偏移UIView大小加上margintop大小。
    設置contentInsetOffset:CGPointMake(0, -100)。注意偏移量是負數
    3> 但是拖動后,又會恢復原來被覆蓋的樣子,希望永遠不回去,還需要設置內邊距,所以是第三個屬性:contentInset,參數為(上,左,下,右)。
    請添加圖片描述

實現

自定義類:

聲明需要的全部組件

關于weak和strong的簡單選用:當前類是否擁有它。

#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface UIScrollViewHimalayanTest : UIView
// 1. 聲明組件:幾個按鈕:(因為可點擊)
/*weak或strong選取:當前類擁有它,則聲明為strong,否則為weak*/
@property(nonatomic, strong) UIScrollView* scrollveiw;
@property(nonatomic, strong) UIView* topbar;
@property(nonatomic, strong) UIView* bottombar;@property(nonatomic, strong) UIButton* l1;
@property(nonatomic, strong) UIButton* l2;
@property(nonatomic, strong) UIButton* l3;
@property(nonatomic, strong) UIButton* r1;
@property(nonatomic, strong) UIButton* r2;
@property(nonatomic, strong) UIButton* r3;
@property(nonatomic, strong) UIButton* bottom1;@end

實現:

僅僅是scrollView加其它UI的創建和初始化

//
//  UIScrollViewHimalayanTest.m
//  OCUI_Learn
//
//  Created by AAA on 2024/6/3.
//#import "UIScrollViewHimalayanTest.h"@implementation UIScrollViewHimalayanTest-(instancetype) initWithFrame:(CGRect)frame{self = [super initWithFrame:frame];if(self){/*創建滾動組件、按鈕:w、h、margincontentSize:必須給大小,如果內容很小,必然不能滾動,滾動的本質是UIScrollView的contentSize很大。寬度設置為屏幕寬度即可,這樣橫向就不能滾動*/CGFloat w = (self.frame.size.width - 30) /2;CGFloat h = w;CGFloat marginleft = 10;CGFloat margintop = 10;CGRect screenBounds = [[UIScreen mainScreen] bounds];_scrollveiw = [[UIScrollView alloc] initWithFrame:screenBounds];_l1 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft, 0, w, h)];_l2 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft, margintop+h, w, h)];_l3 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft, margintop*2+h*2, w, h)];_r1 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft*2+w, 0, w, h)];_r2 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft*2+w, margintop+h, w, h)];_r3 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft*2+w, margintop*2+h*2, w, h)];_bottom1 = [[UIButton alloc] initWithFrame:CGRectMake(marginleft, margintop*3+h*3, 2*w+marginleft, h/2.5)];# pragma mark -- bar設置:bar的位置_topbar =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 120)];_bottombar = [[UIView alloc] initWithFrame:CGRectMake(0, margintop*6+h*4, self.frame.size.width, 100)];// 高度為屏幕大一點,這樣才能滾動,因為滾動本質是內容大于內含實際大小_scrollveiw.contentSize = CGSizeMake(screenBounds.size.width, screenBounds.size.height * 1.05);// 增加背景圖[_l1 setBackgroundImage:[UIImage imageNamed:@"finditem_ad.png"] forState:UIControlStateNormal];[_l2 setBackgroundImage:[UIImage imageNamed:@"finditem_newsound.png"] forState:UIControlStateNormal];[_l3 setBackgroundImage:[UIImage imageNamed:@"finditem_hotpeople.png"] forState:UIControlStateNormal];[_r1 setBackgroundImage:[UIImage imageNamed:@"finditem_wallspoint.png"] forState:UIControlStateNormal];[_r2 setBackgroundImage:[UIImage imageNamed:@"finditem_newpeople.png"] forState:UIControlStateNormal];[_r3 setBackgroundImage:[UIImage imageNamed:@"finditem_ad.png"] forState:UIControlStateNormal];[_bottom1 setBackgroundImage:[UIImage imageNamed:@"finditem_iwannabehere.png"] forState:UIControlStateNormal];# pragma mark -- bar設置:涉及 scrollview 兩個屬性 ↑ 和移量和內邊距/*當前TopBar視圖的不透明度設置底色為白色才會有灰色且透明的效果設置把頂部占滿:需要調整文字的位置、且底部應該調整icon1的位置,首頁的位置,底部大小現在合適。上下bar的信息設置通過Label設置信息通過Button設置iconicon的兩種狀態下圖片不同:默認偏移位置設置:使得topBar內容不要壓住下面的內容:UIScrollView第二個屬性 設置偏移量且拖動后回去仍然不壓住:UIScrollView第三個屬性:設置內邊距設置bottomBar:同TopBar誤區:bottom btn1:y偏移量應該為0,因為它添加在bottombar視圖里面。*/[_topbar setBackgroundColor:[UIColor whiteColor]];_topbar.alpha = 0.6;UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(self.bounds.size.width/2-50, 50, self.frame.size.width, 60)];UIButton *iconbtn = [[UIButton alloc] initWithFrame:CGRectMake(self.bounds.size.width/2+55, 0, 70, 70)];[iconbtn setImage:[UIImage imageNamed:@"find_setting_n.png"] forState:UIControlStateNormal];[iconbtn setImage:[UIImage imageNamed:@"find_setting_h.png"] forState:UIControlStateHighlighted];label1.text = @"喜馬拉雅電臺";_scrollveiw.contentOffset = CGPointMake(0, -70);_scrollveiw.contentInset = UIEdgeInsetsMake(70, 0, 0, 0);[_bottombar setBackgroundColor:[UIColor whiteColor]];_bottombar.alpha = 0.6;UIButton *bottomBtn1 = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 50, 50)];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_n.png.png"] forState:UIControlStateNormal];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_h.png.png"] forState:UIControlStateHighlighted];UIButton *bottomBtn2 = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 50, 50)];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_n.png.png"] forState:UIControlStateNormal];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_h.png.png"] forState:UIControlStateHighlighted];UIButton *bottomBtn3 = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 50, 50)];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_n.png.png"] forState:UIControlStateNormal];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_h.png.png"] forState:UIControlStateHighlighted];UIButton *bottomBtn4 = [[UIButton alloc] initWithFrame:CGRectMake(10, 0, 50, 50)];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_n.png.png"] forState:UIControlStateNormal];[bottomBtn1 setImage:[UIImage imageNamed:@"tab_home_h.png.png"] forState:UIControlStateHighlighted];self.backgroundColor = [UIColor grayColor];/*添加到當前視圖上下的bar:先添加topbar和bottombar*/[self addSubview:_scrollveiw];[_topbar addSubview:label1];[_topbar addSubview:iconbtn];[_bottombar addSubview:bottomBtn1];//[_bottombar addSubview:label2];[_scrollveiw addSubview:_l1];[_scrollveiw addSubview:_l2];[_scrollveiw addSubview:_l3];[_scrollveiw addSubview:_r1];[_scrollveiw addSubview:_r2];[_scrollveiw addSubview:_r3];[_scrollveiw addSubview:_bottom1];[self addSubview:_topbar];[self addSubview:_bottombar];}return self;
}@end

發現問題:

發現整個界面灰蒙蒙一片,我以為是視圖添加順序出錯,使得不透明的上下作為Bar的ViewBar在頂層使得整體灰蒙蒙,仔細檢查是因為我設置不透明度時,應該對Bar設置,而不是對self設置。且添加父視圖順序,一般不會影響到別的樣式內容。

發現設置了按鈕的高亮和普通狀態,點擊后按鈕icon不會變紅。
仔細檢查,它的父視圖(UITopViewBar)沒有包住它。

關于UIScrollView:

· 設置按鈕事件:
當點擊按鈕后可以使得內部畫面做滾動。且滾到超出邊界,應該讓內容滾回到邊界上,代碼按鈕設置contenOffset過于生硬。將重新設置框體放到動畫函數block中即可。
· 隱藏滾動顯示器也可以,設置屬性,self.scrollView.showsHorizontalScrollIndicator = NO;。
· contentInset屬性:
可以理解為滾動到邊上,能多加上多少距離。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/22115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/22115.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/22115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小紅書前端2輪面試期望22K,全程問低代碼設計

一面&#xff08;通過&#xff09; 1、好&#xff0c;那我們開始把&#xff0c;先簡單介紹一下自己的一個經歷&#xff0c;以及自己有亮點的項目&#xff1f;balabala 2、你可以這樣介紹&#xff1a;在這里邊主要負責哪幾個項目&#xff0c;哪些項目是比較有亮點的&#xff0…

python用PyPDF2函數庫方法對pdf文件切割

煩透了那些軟件動不動就要收費&#xff0c;于是自己嘗試碼程序處理pdf分割。 由于PyPDF2更新到了3.0之后&#xff0c;之前網上的舊代碼無法使用&#xff0c;查了半天沒出準譜&#xff0c;結果百度AI生成了代碼&#xff0c;一試&#xff0c;成了&#xff01; 果然&#xff0c;…

代碼隨想錄-算法訓練營day60【單調棧03:柱狀圖中最大的矩形】

代碼隨想錄-035期-算法訓練營【博客筆記匯總表】-CSDN博客 第十章 單調棧part03有了之前單調棧的鋪墊,這道題目就不難了。 ● 84.柱狀圖中最大的矩形https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.htm…

智享直播(三代)2024年:打造24/7實景無人直播,引領年輕資產創業新紀元!

在21世紀的數字化浪潮中&#xff0c;直播行業以其獨特的魅力和無限的可能性&#xff0c;正在全球范圍內掀起一場前所未有的( keJ0277 )創業革命。而在這場革命中&#xff0c;智享直播&#xff08;三代&#xff09;以其創新的技術理念和前瞻的戰略布局&#xff0c;立志于2024年打…

怎么用電腦錄制視頻?小白也能快速上手

隨著網絡技術的發展&#xff0c;電腦錄制視頻已經成為了許多人的日常需求&#xff0c;無論是游戲玩家想錄制自己的精彩操作&#xff0c;還是上班族需要錄制屏幕演示&#xff0c;一款好用的錄屏軟件變得尤為重要。可是你知道怎么用電腦錄制視頻嗎&#xff1f;本文將介紹兩種電腦…

I2C通信協議

I2C通信協議 項目要求是&#xff0c;通過通信線&#xff0c;是實現單片機讀寫外掛模塊寄存器的功能&#xff0c;至少實現&#xff0c;在指定位置寫寄存器和在指定位置讀寄存器&#xff0c;實現了讀寫寄存器&#xff0c;就實現對模塊的控制。 MPU6050&#xff0c;OLED&#xf…

【ARM】Fusa Compiler 6.16 LTS的安全認證報告獲取

【更多軟件使用問題請點擊億道電子官方網站】 1、 文檔目標 了解ARM的Arm Compiler for Embedded FuSa 6.16 LTS的安全認證證書和報告的獲取 2、 問題場景 對于使用了ARM DS Gold/Platinum、MDK pro或者Arm Compiler for Embedded FuSa 6.16 LTS產品的客戶。在對于最終的產品…

生產問題排查:springboot項目啟動時注冊nacos失敗或運行時從nacos閃退

文章目錄 一、引出問題二、解決方案1、使用actuator健康檢查2、項目啟動時判斷nacos是否正常連接3、k8s設置探針 一、引出問題 生產項目是用k8s部署的&#xff0c;最近經常遇到啟動時注冊不到nacos&#xff08;查找nacos的host地址找不到&#xff09;&#xff0c;或者運行的好…

有文字轉語音真人發聲嗎?這5個配音工具堪比真人配音

青春是一首永不老去的歌&#xff0c;它鐫刻在生命的唱片上&#xff0c;永不退色。 每當我們聽到那些熟悉的旋律&#xff0c;心中總會涌起一股暖流&#xff0c;仿佛回到了那個充滿活力和夢想的年代。借助現代科技的力量&#xff0c;我們可以通過文字轉語音軟件&#xff0c;讓這…

.NET集成DeveloperSharp實現圖片的裁剪、縮放、與加水印

&#x1f3c6;作者&#xff1a;科技、互聯網行業優質創作者 &#x1f3c6;專注領域&#xff1a;.Net技術、軟件架構、人工智能、數字化轉型、DeveloperSharp、微服務、工業互聯網、智能制造 &#x1f3c6;歡迎關注我&#xff08;Net數字智慧化基地&#xff09;&#xff0c;里面…

Apache Doris 基礎 -- 數據表設計(表索引)

1、索引概述 索引用于幫助快速過濾或搜索數據。目前&#xff0c;Doris支持兩種類型的索引:內置智能索引和用戶創建的二級索引。 內置智能索引 排序鍵和前綴索引:Apache Doris基于排序鍵以有序的方式存儲數據。它為每1024行數據創建一個前綴索引。索引中的鍵是當前1024行組的…

github搭建個人博客

準備工作 windows安裝nodejs windows安裝git windows安裝hexo 擁有gitee個人賬戶 配置信息 通過gitee創建博客倉庫 登錄gitee平臺&#xff0c;進入主界面&#xff0c;右側加號&#xff0c;新建倉庫&#xff0c;注意&#xff1a;倉庫名稱和gitee用戶名稱一致 生成/添加 SSH 公…

初級網絡工程師之入門到入獄(一)

本文是我在學習過程中記錄學習的點點滴滴&#xff0c;目的是為了學完之后鞏固一下順便也和大家分享一下&#xff0c;日后忘記了也可以方便快速的復習。 網絡工程師從入門到入獄 前言一、交換機二、路由器三、DHCP&#xff08;動態主機配置協議&#xff09;四、路由器配置 DHCP自…

【golang】go語言讀取Excel表格中的數據

導入庫基本用法封裝 在Go語言中&#xff0c;可以使用第三方庫來讀取Excel文件。 常用的庫是github.com/tealeg/xlsx&#xff0c;提供了處理Excel文件的功能。 導入庫 首先&#xff0c;安裝"github.com/tealeg/xlsx"庫。可以通過以下命令在終端中安裝&#xff1a; g…

Transformer系列:Greedy Search貪婪搜索解碼流程原理解析

解碼器預測流程簡述 Encoder-Decoder這類框架需要在解碼器中分別拿到前文已經翻譯的輸入&#xff0c;以及編碼器的輸出這兩個輸入&#xff0c;一起預測出下一個翻譯的單詞。在訓練階段&#xff0c;一個句子通過右移一位的方式轉化為從第二個詞到最后一個詞的逐位預測任務&…

Springboot vue elementui 前后端分離 事故災害案例管理系統

源碼鏈接 系統演示:https://pan.baidu.com/s/1hZQ25cpI-B4keFsZdlzimg?pwdgw48

【Golang】go語言寫入數據并保存Excel表格

導入包創建文件添加表格添加行添加單元格保存文件封裝 導入包 首先&#xff0c;安裝github.com/tealeg/xlsx庫。可以通過以下命令在終端中安裝&#xff1a; go get github.com/tealeg/xlsx創建文件 指定好文件的名字 fileName : "D:\\a.xlsx"再判斷文件是否存在&…

Java集合概述

分類 分為兩大類&#xff1a;Collection接口類和Map接口類 這兩個接口都繼承自一個共同的接口&#xff1a;Iterable接口&#xff0c;意為可迭代的 Iterable接口當中有一個Iterator迭代器接口對象&#xff0c;作為接口的變量&#xff08;public static final修飾&#xff09;…

Win10字體模糊?記好這5個方法,解決問題很簡單!

“我的電腦是win10的&#xff0c;不知道是什么原因&#xff0c;電腦字體總是很模糊&#xff0c;大家有什么方法可以解決這個問題嗎&#xff1f;” 在數字時代的浪潮中&#xff0c;Win10以其出色的性能和豐富的功能贏得了廣大用戶的青睞。然而&#xff0c;就像任何一款操作系統一…

廣東電網突破2億千瓦,華火新能源電燃灶引領綠色烹飪“灶”未來

近日&#xff0c;廣東電網統調裝機容量歷史性突破2億千瓦&#xff0c;標志著廣東省在電力發展上邁出了堅實的步伐。這一重大成就不僅彰顯了廣東在能源領域的強勁實力&#xff0c;也為華火新能源電燃灶等綠色技術的普及應用提供了有力的支撐。 廣東電網統調裝機容量的突破&#…