两步实现IOS之WMPageController分页(左右切换显示)

本章阐述如何使用IOS移动端开发时,做一个界面上实现分页的效果,状态拦上左右相互之间切换。

一:DeviceController.h

#import <UIKit/UIKit.h>
#import "BaseViewController.h"
#import "WMPageController.h"
#import "TempViewController.h"
#import "ChartViewController.h"
#import "CommonDefaults.h"
#import "HomeManager.h"

@interface DeviceController : WMPageController
 
@property (nonatomic, assign) WMMenuViewPosition menuViewPosition;

@property (assign, nonatomic) CGPoint printPoint;

@property (strong, nonatomic) NSString *deviceIds;

@property(strong, nonatomic) NSMutableArray *dcList;

@property(nonatomic, strong) NSString *result;

@end

DeviceController.m

#import "DeviceController.h"

#define maxOffsetY 460

#define XLScreenW [UIScreen mainScreen].bounds.size.width

#define XLScreenH [UIScreen mainScreen].bounds.size.height

#define THWParam [UIScreen mainScreen].bounds.size.width/375.0f

#define THParamH XLScreenH/667.0f

#define XLfloat(a) a*THWParam

#define SafeAreaTopHeight (XLScreenH == 812.0 ? 88 : 64)

#define SafeStatusTopHeight (XLScreenH == 812.0 ? 44 : 0)

#define SafeMeStatusTopHeight (XLScreenH == 812.0 ? 44 : 20)

#define SafeMeStatusBottomHeight (XLScreenH == 812.0 ? 34 : 0)

//调用的相关代理
@interface DeviceController ()<>{
}

@property (nonatomic, strong) UIView *redView;

@end

@implementation DeviceController

- (void)viewDidLoad {
    self.view.backgroundColor = [UIColor grayColor];
    self.progressHeight = 3;//下划线的高度,需要WMMenuViewStyleLine样式
    self.progressWidth = 35;
    self.menuItemWidth = 25;
    self.menuViewContentMargin = 10;

    self.progressViewIsNaughty = true;
    self.menuViewStyle = WMMenuViewStyleLine;
    self.titleColorNormal = [UIColor whiteColor];
    self.titleColorSelected = [UIColor whiteColor];//设置选中文字颜色
    self.progressColor = [UIColor whiteColor];
    self.titleSizeSelected = 18;//设置选中文字大小
    self.titleSizeNormal = 16;
    self.titleFontName = @"Helvetica-Bold";
    self.showOnNavigationBar = YES;
    self.scrollEnable = NO;
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    if (self.menuViewStyle == WMMenuViewStyleTriangle) {
        [self.view addSubview:self.redView];
    }
}
- (UIView *)redView {
    if (!_redView) {
        _redView = [[UIView alloc] initWithFrame:CGRectZero];
        _redView.backgroundColor = [UIColor colorWithRed:168.0/255.0 green:20.0/255.0 blue:4/255.0 alpha:1];
    }
    return _redView;
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.redView.frame = CGRectMake(0, CGRectGetMaxY(self.menuView.frame), self.view.frame.size.width, 2.0);
}

- (NSInteger)numbersOfChildControllersInPageController:(WMPageController *)pageController {
    switch (self.menuViewStyle) {
        case WMMenuViewStyleFlood: return 2;
        case WMMenuViewStyleSegmented: return 2;
        default: return 2;
    }
}

- (NSString *)pageController:(WMPageController *)pageController titleAtIndex:(NSInteger)index {
    switch (index) {
        case 0: return @"Temp";
        case 1: return @"Chart";
    }
    return @"NONE";
}

- (UIViewController *)pageController:(WMPageController *)pageController viewControllerAtIndex:(NSInteger)index {
    switch (index) {
        case 0:
        {
            TempViewController *temp = [[TempViewController alloc] init];
            //temp.bleModel = self.bleModel;
            return temp;
        }

        case 1:
        {
            ChartViewController *chart = [[ChartViewController alloc] init];
            //chart.bleModel = self.bleModel;
            //chart.LowBattey = self.LowBattey;
            return chart;
        }
    }
    return [[UIViewController alloc] init];
}

- (CGFloat)menuView:(WMMenuView *)menu widthForItemAtIndex:(NSInteger)index {
    CGFloat width = [super menuView:menu widthForItemAtIndex:index];
    return width+30;
}

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForMenuView:(WMMenuView *)menuView {
    if (self.menuViewPosition == WMMenuViewPositionBottom) {
        menuView.backgroundColor = [UIColor colorWithWhite:0.95 alpha:1.0];
        return CGRectMake(0, self.view.frame.size.height, self.view.frame.size.width, 44);
    }
    CGFloat leftMargin = self.showOnNavigationBar ? 50 : 0;
    CGFloat originY = self.showOnNavigationBar ? 0 : CGRectGetMaxY(self.navigationController.navigationBar.frame);
    return CGRectMake(leftMargin, originY, self.view.frame.size.width - 2*leftMargin, 44);
}

- (CGRect)pageController:(WMPageController *)pageController preferredFrameForContentView:(WMScrollView *)contentView {
    if (self.menuViewPosition == WMMenuViewPositionBottom) {
        return CGRectMake(0, 64, self.view.frame.size.width, self.view.frame.size.height);
    }
    CGFloat originY = CGRectGetMaxY([self pageController:pageController preferredFrameForMenuView:self.menuView]);
    if (self.menuViewStyle == WMMenuViewStyleTriangle) {
        originY += self.redView.frame.size.height;
    }
    return CGRectMake(0, originY, self.view.frame.size.width, self.view.frame.size.height-originY);
}

/*
 程序加载的时候调用
 */
- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
    NSLog(@"%@wo shi jin lai de:",@"xiao ming");
}

二:TempViewController.h

#import <UIKit/UIKit.h>
#import "BaseViewController.h"
#import "TempView.h"

NS_ASSUME_NONNULL_BEGIN

@interface TempViewController : BaseViewController

@property(nonatomic,strong)TempView* tempview;

@end

NS_ASSUME_NONNULL_END

TempViewController.m

#import "TempViewController.h"

@interface TempViewController()<TempViewDelegate>

@end


@implementation TempViewController

-(void)viewDidLoad{
    [super viewDidLoad];
    [self initDate];
}

- (void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];
}

-(void)initDate{
    [self getTmpView];
    self.tempview.frame=self.view.bounds;
    [self.view addSubview:self.tempview];
    self.tempview.delegate=self;

    self.tempview.mMacLb.text=@"666";
}

-(TempView*)getTmpView{
    if(self.tempview==nil){
        self.tempview = [[TempView alloc] init];
    }
    return self.tempview;
}
@end

ChartViewController界面跟TempViewController一样的模版,改个文件名就可以了。

效果图:
在这里插入图片描述
在这里插入图片描述

这期就阐述到此为止,很简单的两个界面代码,就可以实现IOS分页的左右切换,留下记录希望帮助到更多需要的IT移动开发者,若不懂,可以留言,关注。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的代码实现 iOS 域名切换的示例: 1. 创建一个管理类,例如 NetworkManager,用于管理域名的切换: ``` @interface NetworkManager : NSObject + (instancetype)sharedInstance; @property (nonatomic, strong) NSString *currentDomain; - (NSString *)getBaseUrl; - (void)switchToBackupDomain; @end ``` 2. 在 NetworkManager 类中,定义一个数组用于存储备用域名,以及一个属性用于存储当前的域名: ``` @interface NetworkManager () @property (nonatomic, strong) NSArray *backupDomains; @property (nonatomic, strong) NSString *currentDomain; @end ``` 3. 实现 NetworkManager 中的方法,用于获取当前域名以及切换到备用域名: ``` @implementation NetworkManager + (instancetype)sharedInstance { static NetworkManager *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[NetworkManager alloc] init]; instance.backupDomains = @[@"backup1.example.com", @"backup2.example.com"]; instance.currentDomain = @"example.com"; }); return instance; } - (NSString *)getBaseUrl { return [NSString stringWithFormat:@"https://%@", self.currentDomain]; } - (void)switchToBackupDomain { NSInteger index = [self.backupDomains indexOfObject:self.currentDomain]; if (index == NSNotFound) { index = 0; } else { index = (index + 1) % self.backupDomains.count; } self.currentDomain = self.backupDomains[index]; } @end ``` 4. 在应用启动时,调用 NetworkManager 的 sharedInstance 方法获取当前域名,然后使用该域名进行网络请求。例如,在 AppDelegate.m 中: ``` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { NSString *baseUrl = [[NetworkManager sharedInstance] getBaseUrl]; // 使用 baseUrl 进行网络请求 return YES; } ``` 5. 在需要切换域名时,调用 NetworkManager 中的 switchToBackupDomain 方法切换到备用域名。例如,在某个网络请求失败时: ``` - (void)requestFailed { [[NetworkManager sharedInstance] switchToBackupDomain]; NSString *baseUrl = [[NetworkManager sharedInstance] getBaseUrl]; // 使用新的 baseUrl 进行网络请求 } ``` 需要注意的是,在切换域名时,应该先取消当前的网络请求,然后再重新建立连接。同时,为了避免频繁切换域名造成网络不稳定,建议设置一个切换域名的时间间隔,例如每隔 30 秒切换一次。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值