当前位置:  编程技术>移动开发
本页文章导读:
    ▪关于init步骤的解释        关于init方法的解释- (id)init { self = [super init]; if (self) { //.......... } return self; } [super init]的返回值和self的类型都是id类型,所以可以这么写。 如果父类初始化失败,会返回nil.........
    ▪ Qt移植到开发板下怎么使用触摸屏及改变界面大小        Qt移植到开发板上如何使用触摸屏及改变界面大小 触摸屏: 一、首先要在开发板上安装tslib ,具体安装步骤参考我之前的博客:http://blog.csdn.net/start530/article/details/8018096 二、安装完后,加载.........
    ▪ 简略的仿Path风格菜单的实现       简单的仿Path风格菜单的实现刚开始只是在顶部导航栏添加两个按钮,用来控制主屏的左右移动。 - (void)setupNavBar { _navBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.middleView.frame.size.width, 44)];.........

[1]关于init步骤的解释
    来源: 互联网  发布时间: 2014-02-18
关于init方法的解释
- (id)init
{
    self = [super init];
    if (self) {
        //..........
    }
    return self;
}

[super init]的返回值和self的类型都是id类型,所以可以这么写。

如果父类初始化失败,会返回nil。所以要判断父类是不是初始化成功了,才能做子类的初始化。因为万一没有初始化成功,相当于对nil操作,会报exception。



    
[2] Qt移植到开发板下怎么使用触摸屏及改变界面大小
    来源: 互联网  发布时间: 2014-02-18
Qt移植到开发板上如何使用触摸屏及改变界面大小

 触摸屏:

一、首先要在开发板上安装tslib ,具体安装步骤参考我之前的博客:http://blog.csdn.net/start530/article/details/8018096

二、安装完后,加载触摸屏驱动:insmod ts.ko,然后运行./ts_calibrate 进行五点校准,之后会在/etc/下生成一个文件 pointercal,要有这个触摸屏才能用。

三、修改/etc/profile:

        添加这几行 :

        export QWS_MOUSE_PROTO=Tslib:/dev/input/event0   (这个event*是根据你加载触摸屏驱动后 ls /dev/event* ,然后查看新添加的是哪个event)
       export QWS_DISPLAY=LinuxFb:/dev/fb0  
       export QWS_SIZE=480x272     (通过这个设置qt界面的大小)

       保存,退出,在命令行输入 source /etc/profile

 

四、运行qt可执行程序,ok


 界面大小:

在qt main.cpp函数里添加

MainWindow w;

w.resize(480,272);  (开发板lcd分辨率)

w.show();

    
转载请出名出处!

    
[3] 简略的仿Path风格菜单的实现
    来源: 互联网  发布时间: 2014-02-18
简单的仿Path风格菜单的实现

刚开始只是在顶部导航栏添加两个按钮,用来控制主屏的左右移动。

- (void)setupNavBar
{
    _navBar = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.middleView.frame.size.width, 44)];
    self.navBar.backgroundColor = [UIColor blueColor];
    [self.middleView addSubview:self.navBar];
    
    UIButton *leftNavBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    leftNavBtn.frame = CGRectMake(10, 0, 44, 44);
    [self.navBar addSubview:leftNavBtn];
    [leftNavBtn setTitle:@"Left" forState:UIControlStateNormal];
    [leftNavBtn addTarget:self action:@selector(leftNavBtnDidClick:) forControlEvents:UIControlEventTouchUpInside];
    
    UIButton *rightNavBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    rightNavBtn.frame = CGRectMake(self.navBar.frame.size.width - 10 - 44, 0, 44, 44);
    [self.navBar addSubview:rightNavBtn];
    [rightNavBtn setTitle:@"Right" forState:UIControlStateNormal];
    [rightNavBtn addTarget:self action:@selector(rightNavBtnDidClick:) forControlEvents:UIControlEventTouchUpInside];
}

并且是通过点击按钮修改button的tag来记录当前屏幕展示的状态,有点挫。

后来整理了下,设置一个状态变量:

typedef enum _screenStateType {
    kNormalState = 0,
    kLeftState,     // Show the left-view
    kRightState,    // Show the right-view
    kDriftingState  // Drifting
} ScreenStateType;

通过屏幕状态变量来控制屏幕的左右滑动:

#pragma mark - Slide to Left or Right

#define LEFT_SLIDE_OFFSET   260.0f
#define RIGHT_SLIDE_OFFSET  (-260.0f)

- (void)leftNavBtnDidClick:(UIButton *)btn
{
    if (kNormalState == self.screenState) {
        [self slideFromeState:self.screenState toState:kLeftState];
    } else {
        [self slideFromeState:self.screenState toState:kNormalState];
    }
}

- (void)rightNavBtnDidClick:(UIButton *)btn
{
    if (kNormalState == self.screenState) {
        [self slideFromeState:self.screenState toState:kRightState];
    } else {
        [self slideFromeState:self.screenState toState:kNormalState];
    }
}

- (void)slideFromeState:(ScreenStateType)oState toState:(ScreenStateType)dState
{
    if (self.isSliding) return ;
    self.isSliding = YES;
    
    __block CGRect rect = self.middleView.frame;
    rect.origin.x = 0.0f;
    
    id completionBlk = nil;
    
    switch (oState) {
        case kNormalState:
            if (kLeftState == dState) {
                self.rightView.hidden = YES;
                rect.origin.x = LEFT_SLIDE_OFFSET;
            } else if (kRightState == dState) {
                self.leftView.hidden = YES;
                rect.origin.x = RIGHT_SLIDE_OFFSET;
            }
            break;
            
        case kLeftState:
        case kRightState:
            if (kNormalState == dState) {
                completionBlk = ^(BOOL finished) { self.leftView.hidden = NO; self.rightView.hidden = NO; };
            }
            break;
            
        case kDriftingState:
            if (kLeftState == dState) {
                rect.origin.x = LEFT_SLIDE_OFFSET;
            } else if (kRightState == dState) {
                rect.origin.x = RIGHT_SLIDE_OFFSET;
            } else if (kNormalState == dState) {
                completionBlk = ^(BOOL finished) { self.leftView.hidden = NO; self.rightView.hidden = NO; };
            }
            break;
            
        default:
            break;
    }
    
    id animationBlk = ^{ self.middleView.frame = rect; };
    [UIView animateWithDuration:0.3f animations:animationBlk completion:completionBlk];
    
    self.screenState = dState;
    self.isSliding = NO;
}

当完成这样的功能后,我在模拟器上跑了下,觉得还行。不过在真机跑的时候,我习惯用拇指来滑动,而不是用导航栏的按钮。

当修改为可以通过手指滑屏后,又发现太容易滑了,有点影响用户体验,所以在移动过程先尝试检测下用户是否真的想滑屏:

#pragma mark - Finger Touch

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint fingerPoint = [touch locationInView:self.middleView];
    if ([self.middleView pointInside:fingerPoint withEvent:nil]) {
        fingerPoint = [touch locationInView:self.view];
        self.lastFingerX = fingerPoint.x;
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint fingerPoint = [touch locationInView:self.view];
    
    // The user really wants to move the screen ?
    if (!self.canDrag && abs(fingerPoint.x - self.lastFingerX) > 30) {
        self.canDrag = YES ;
        self.lastFingerX = fingerPoint.x;
    }
    
    if (!self.canDrag) return ;
    
    CGRect rect = self.middleView.frame;
    rect.origin.x += (fingerPoint.x - self.lastFingerX);
    rect.origin.x = (rect.origin.x > LEFT_SLIDE_OFFSET) ? LEFT_SLIDE_OFFSET : rect.origin.x;
    rect.origin.x = (rect.origin.x < RIGHT_SLIDE_OFFSET) ? RIGHT_SLIDE_OFFSET : rect.origin.x;
    self.middleView.frame = rect;
    
    if (rect.origin.x > 0) {
        self.rightView.hidden = YES;
        self.leftView.hidden = NO;
    } else if (rect.origin.x < 0) {
        self.leftView.hidden = YES;
        self.rightView.hidden = NO;
    } else {
        self.leftView.hidden = self.rightView.hidden = NO;
    }
    
    self.lastFingerX = fingerPoint.x;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.canDrag = NO;
    
    CGFloat boundary = 50.0f;
    CGRect rect = self.middleView.frame;
    
    ScreenStateType lastScreenState = self.screenState;
    self.screenState = kDriftingState;
    
    switch (lastScreenState) {
        case kNormalState:
            if (rect.origin.x < (0 - boundary)) {
                [self slideFromeState:self.screenState toState:kRightState];
            } else if (rect.origin.x > (0 + boundary)) {
                [self slideFromeState:self.screenState toState:kLeftState];
            } else {
                [self slideFromeState:self.screenState toState:kNormalState];
            }
            break;
            
        case kLeftState:
            if (rect.origin.x < LEFT_SLIDE_OFFSET - boundary) {
                [self slideFromeState:self.screenState toState:kNormalState];
            } else {
                [self slideFromeState:self.screenState toState:kLeftState];
            }
            break;
            
        case kRightState:
            if (rect.origin.x > RIGHT_SLIDE_OFFSET + boundary) {
                [self slideFromeState:self.screenState toState:kNormalState];
            } else {
                [self slideFromeState:self.screenState toState:kRightState];
            }
            break;
            
        default:
            [self slideFromeState:self.screenState toState:kNormalState];
            break;
    }
}

  

完整的代码参见:https://gist.github.com/3857426


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3