文件圖例.png
AppDelegate代碼.png
self.window = UIWindow(frame:UIScreen.main.bounds)
self.window?.backgroundColor = UIColor.white
self.window?.makeKeyAndVisible()
//選擇引導(dǎo)頁還是主視圖控制器
//獲取用戶偏好設(shè)置類
let user = UserDefaults.standard
let isFirst = user.bool(forKey: "isFirst")
if isFirst {//為真顯示主視圖
let mainVC = MainViewController()
self.window?.rootViewController = mainVC
}else{//引導(dǎo)頁
let guideVC = GuideViewController()
self.window?.rootViewController = guideVC
}
HomeViewController.swift代碼如下:
import UIKit
class HomeViewController: UITableViewController {
//表頭視圖上的輪播圖
var scrollView:UIScrollView!
//點點
var pageCotrol:UIPageControl!
//定時器
var timer:Timer?
//重用標(biāo)識
let amenuCell = "cell"
override func loadView() {
self.tableView = UITableView(frame: UIScreen.main.bounds, style: .grouped)
}
override func viewDidLoad() {
super.viewDidLoad()
self.setNavigationBar()
self.setHeaderView()
//注冊cell
self.tableView.register(MenuCell.self, forCellReuseIdentifier: amenuCell)
self.tableView.separatorStyle = .none
//添加定時器
self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
}
//設(shè)置導(dǎo)航欄的方法
func setNavigationBar() {
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
//設(shè)置導(dǎo)航欄樣式
self.navigationController?.navigationBar.barStyle = .blackOpaque
//設(shè)置導(dǎo)航欄的shadowImage(就是一根白線逐工,可細(xì)了)顏色
self.navigationController?.navigationBar.shadowImage = UIImage()
//隱藏導(dǎo)航欄
// self.navigationController?.navigationBar.isHidden = true
//將帶有導(dǎo)航欄時,scrrollView或者scrrollView的子類,布局方式調(diào)整到以屏幕左上角為原點
self.automaticallyAdjustsScrollViewInsets = false
}
//表頭視圖
func setHeaderView(){
let headerView = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 160))
headerView.backgroundColor = UIColor.cyan
self.scrollView = UIScrollView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 160))
self.scrollView.contentSize = CGSize(width: CGFloat(CircleImageCount + 2) * KScreenWidth, height: 160)
self.scrollView.isPagingEnabled = true
self.scrollView.showsHorizontalScrollIndicator = false
//設(shè)置偏移量
self.scrollView.contentOffset.x = KScreenWidth
//設(shè)置代理
self.scrollView.delegate = self
for i in 0..<(CircleImageCount + 2) {
let imageView = UIImageView(frame: CGRect(x: CGFloat(i) * KScreenWidth, y: 0, width: KScreenWidth, height: 160))
if i == 0 {
imageView.image = UIImage(named: String(format: "house%d.jpg", CircleImageCount))
}else if i>0 && i<(CircleImageCount + 1){
imageView.image = UIImage(named: String(format: "house%d.jpg", i))
}else{
imageView.image = UIImage(named: "house1.jpg")
}
self.scrollView.addSubview(imageView)
}
headerView.addSubview(scrollView)
self.pageCotrol = UIPageControl(frame: CGRect(x: (KScreenWidth - 200)*0.5, y: 140, width: 200, height: 20))
self.pageCotrol.currentPageIndicatorTintColor = UIColor.cyan
self.pageCotrol.pageIndicatorTintColor = UIColor.black
self.pageCotrol.numberOfPages = CircleImageCount
headerView.addSubview(pageCotrol)
self.tableView.tableHeaderView = headerView
}
//實現(xiàn)scrollView的代理方法
override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
// super.scrollViewDidEndDecelerating(scrollView)
//偏移了多少個屏幕的寬
if scrollView == self.scrollView {
let page = Int(scrollView.contentOffset.x / KScreenWidth)
self.pageCotrol.currentPage = 0
if page == 6 {
scrollView.contentOffset.x = KScreenWidth
}else if page == 0 {
scrollView.contentOffset.x = CGFloat(CircleImageCount) * KScreenWidth
self.pageCotrol.currentPage = CircleImageCount - 1
}else{
self.pageCotrol.currentPage = page - 1
}
}
}
//MARK: - 定時器關(guān)聯(lián)方法
func timerAction() {
//獲取頁數(shù)
let page = self.scrollView.contentOffset.x / KScreenWidth
if page == 5 {//頁數(shù)==5返回第一張
self.scrollView.contentOffset.x = KScreenWidth
self.pageCotrol.currentPage = 0
}else{
self.scrollView.contentOffset.x = (page + 1) * KScreenWidth
self.pageCotrol.currentPage = Int(page)
}
}
//開始拖拽觸發(fā)的方法
override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
if scrollView == self.scrollView {
self.timer?.invalidate()
self.timer = nil
}
}
//停止拖拽觸發(fā)的方法
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if scrollView == self.scrollView {
self.timer = Timer.scheduledTimer(timeInterval: 2.0, target: self, selector: #selector(timerAction), userInfo: nil, repeats: true)
}
}
//區(qū)尾視圖
//cell
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 3
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: amenuCell, for: indexPath) as! MenuCell
if indexPath.row == 0 {
//titleLable
cell.titleLable.text = " ◆推薦房源"
//picView
cell.picView.image = UIImage(named: "home_cell1.jpg")
return cell
}else if indexPath.row == 1{
//titleLable
cell.titleLable.text = " ◆社區(qū)生活"
//picView
cell.picView.image = UIImage(named: "home_cell2.jpg")
return cell
}else{
cell.titleLable.text = " ◆分享活動"
cell.picView.image = UIImage(named: "home_cell3.jpeg")
return cell
}
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 197
}
//頭部視圖
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let sectionView = UIView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: 206))
sectionView.backgroundColor = UIColor.white
for i in 0..<MenuButtonCount {
let amenuView = MenuView()
if i < 3 {
//布第一行菜單按鈕
amenuView.frame = CGRect(x: 40 + i * (59 + 59), y: 20, width: 59, height: 80)
}else{
//布第二行菜單按鈕
amenuView.frame = CGRect(x: 40 + (i - 3) * (59 + 59), y: 109, width: 59, height: 80)
}
//給控件MenuView上的子控件賦值
amenuView.iconView.image = UIImage(named: MenuSouce[i]["image"]!)
amenuView.titleLable.text = MenuSouce[i]["title"]
amenuView.titleLable.font = UIFont.systemFont(ofSize: 13.0)
amenuView.titleLable.textColor = UIColor.black
amenuView.tag = 300 + i
//輕拍手勢
let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
amenuView.addGestureRecognizer(tap)
sectionView.addSubview(amenuView)
}
return sectionView
}
//MARK:- 輕拍手勢的關(guān)聯(lián)方法
//"title":"整租", "image":"ic_home_The entire rent_normal"],["title":"合租", "image":"ic_home_Flat-share_normal"], ["title":"短租", "image":"ic_home_Short rent_normal"], ["title":"服務(wù)", "image":"ic_home_service_normal"], ["title":"室友", "image":"ic_home_roommate_normal"], ["title":"收藏", "image":"ic_home_Collection_normal"
func tapAction(sender:UITapGestureRecognizer){
let tapView = sender.view as! MenuView
switch tapView.tag {
case 300:
print("整租")
case 301:
print("合租")
case 302:
print("短租")
case 303:
print("服務(wù)")
case 304:
print("室友")
case 305:
print("收藏")
default:
print("BUG")
}
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 206
}
/*
// Override to support conditional editing of the table view.
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
*/
/*
// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
// Delete the row from the data source
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
*/
/*
// Override to support rearranging the table view.
override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
}
*/
/*
// Override to support conditional rearranging of the table view.
override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the item to be re-orderable.
return true
}
*/
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
MenuView.swift代碼如下:
import UIKit
class MenuView: UIView {
var iconView:UIImageView!
var titleLable:UILabel!
override init(frame: CGRect) {
super.init(frame: frame)
self.setupViews()
}
//定義UIImageView和UILabel
func setupViews() {
//frame: CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height * 0.7)
iconView = UIImageView()
// iconView.backgroundColor = UIColor.cyan
self.addSubview(iconView)
//frame: CGRect(x: 0, y: self.frame.height * 0.7, width: self.frame.width, height: self.frame.height * 0.3)
titleLable = UILabel()
// titleLable.backgroundColor = UIColor.red
titleLable.textAlignment = .center
self.addSubview(titleLable)
}
//重布局子視圖
override func layoutSubviews() {
iconView.frame = CGRect(x: 0, y: 0, width: self.frame.width, height: self.frame.height * 0.7)
titleLable.frame = CGRect(x: 0, y: self.frame.height * 0.7, width: self.frame.width, height: self.frame.height * 0.3)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
}
MenuCell.swift代碼如下:
import UIKit
class MenuCell: UITableViewCell {
var titleLable:UILabel!
var picView:UIImageView!
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.setupViews()
}
func setupViews() {
picView = UIImageView(frame: CGRect(x: 0, y: 7, width: KScreenWidth, height: 190))
self.contentView.addSubview(picView)
titleLable = UILabel(frame: CGRect(x: 0, y: 23, width: 120, height: 21))
//單純的修改顏色的透明值
let backColor = UIColor.white
backColor.withAlphaComponent(0.5)
titleLable.backgroundColor = backColor
self.contentView.addSubview(titleLable)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
}
Base / MainViewController.swift代碼如下:
import UIKit
class MainViewController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.white
self.setupViewControllers()
}
//
func setupViewControllers(){
//首頁:Home
let homeVC = HomeViewController()
let homeNC = UINavigationController(rootViewController: homeVC)
homeVC.tabBarItem.title = "Home"
homeVC.tabBarItem.image = UIImage(named: "ic_me_home_non")
homeVC.tabBarItem.selectedImage = UIImage(named: "ic_home_home_normal")
homeVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
//活動:Activity
let activityVC = ActivityViewController()
let activityNC = UINavigationController(rootViewController: activityVC)
activityVC.tabBarItem.title = "Activity"
activityVC.tabBarItem.image = UIImage(named: "ic_me_activity_non")
activityVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
//消息:Messages
let messagesVC = MessageViewController()
let messagesNC = UINavigationController(rootViewController: messagesVC)
messagesVC.tabBarItem.title = "Messages"
messagesVC.tabBarItem.image = UIImage(named: "ic_me_news_non")
messagesVC.tabBarItem.badgeValue = "1"
messagesVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
//我的:Me
let meVC = MeViewController()
let meNC = UINavigationController(rootViewController: meVC)
meVC.tabBarItem.title = "Me"
meVC.tabBarItem.image = UIImage(named: "ic_home_me_non")
meVC.tabBarItem.selectedImage = UIImage(named: "ic_me_me_normal")?.withRenderingMode(.alwaysOriginal)
meVC.tabBarItem.setTitleTextAttributes([NSFontAttributeName:UIFont.systemFont(ofSize: 12.0),NSForegroundColorAttributeName:ThemeColor], for: .selected)
//添加到數(shù)組
self.viewControllers = [homeNC,activityNC,messagesNC,meNC]
self.tabBar.tintColor = #colorLiteral(red: 0.07050808519, green: 0.6223047376, blue: 0.5250155926, alpha: 1)
}
//選中tabBarItem的時候觸發(fā)
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
item.badgeValue = nil
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
ConstFile.swift代碼如下:
import UIKit
//引導(dǎo)頁的個數(shù)
let GuideImageCount = 3
//輪播圖的個數(shù)
let CircleImageCount = 5
//菜單按鈕的個數(shù)
let MenuButtonCount = 6
//菜單資源
let MenuSouce:[[String:String]] = [
["title":"整租", "image":"ic_home_The entire rent_normal"],
["title":"合租", "image":"ic_home_Flat-share_normal"],
["title":"短租", "image":"ic_home_Short rent_normal"],
["title":"服務(wù)", "image":"ic_home_service_normal"],
["title":"室友", "image":"ic_home_roommate_normal"],
["title":"收藏", "image":"ic_home_Collection_normal"]
]
//屏幕的寬
let KScreenWidth = UIScreen.main.bounds.width
//屏幕的高
let KScreenHeight = UIScreen.main.bounds.height
//主題色
let ThemeColor = UIColor(red: 1.0/255, green: 179.0/255, blue: 135.0/255, alpha: 1)
Guide / Controller / GuideViewController.swift代碼如下:
import UIKit
class GuideViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupViews()
}
//輸出導(dǎo)航頁
func setupViews(){
let scrollerView = UIScrollView(frame: UIScreen.main.bounds)
scrollerView.contentSize = CGSize(width: CGFloat(GuideImageCount) * KScreenWidth, height: CGFloat(KScreenHeight))
//設(shè)置整頁滾動
scrollerView.isPagingEnabled = true
//彈簧效果
scrollerView.bounces = false
//取消底部滾動條
scrollerView.showsHorizontalScrollIndicator = false
self.view.addSubview(scrollerView)
for i in 0..<GuideImageCount {
let imageView = UIImageView(frame: CGRect(x: CGFloat(i) * KScreenWidth, y: 0, width: KScreenWidth, height: KScreenHeight))
imageView.image = UIImage(named: String(format: "guide%d", i))
scrollerView.addSubview(imageView)
if i == GuideImageCount - 1 {
imageView.isUserInteractionEnabled = true
let tap = UITapGestureRecognizer(target: self, action: #selector(tapAction))
imageView.addGestureRecognizer(tap)
}
}
}
//MARK:- 輕拍手勢的關(guān)聯(lián)方法
func tapAction(){
let user = UserDefaults.standard
//防止多個值并發(fā)
user.set(true, forKey: "isFirst")
//同步操作
user.synchronize()
let application = UIApplication.shared
application.keyWindow?.rootViewController = MainViewController()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}