3月 11

swift 代码生成导航条

swift开始学习使用代码做UI。记录导航条生成。

    // 加载导航条
    func setupPageNav(){
        let topNav:UINavigationBar=UINavigationBar()
        let topNavIemt:UINavigationItem=UINavigationItem()
        topNavIemt.title="单条设置"
        //添加右侧按键
        topNavIemt.rightBarButtonItem=UIBarButtonItem(title:"返回", style:.Plain,target:self, action:"backPage")
        topNav.tintColor = UIColor.blueColor()
        //画个矩形框
        topNav.frame = CGRectMake(0, 0,self.view.frame.width,64)
        topNav.pushNavigationItem(topNavIemt, animated: true)
        self.view.addSubview(topNav)
    }
2月 26

iPhone 手机控制linux服务器,swift2语言使用pickerview控件源码

之前的写的“iPhone 手机控制linux服务器程序源码”(http://www.simonzhang.net/?p=2861 )。开启时间使用textfidld,太麻烦了。就保留常用的几个时间即可。所以改为使用pickerview控件。控制没有使用故事板,直接代码控制位置。源码如下,其他部分使用之前的代码。iphone6调试正常。

//
//  door.swift
//  mydoor
//
//  Created by zhangzimeng on 16/1/6.
//  Copyright © 2016年 com. All rights reserved.
//

import UIKit
import Alamofire
import Crypto

class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate {
    var timePicker:UIPickerView!
    var buildString = ["3秒", "30分钟" , "1小时", "2小时", "3小时", "4小时"]
    var buildInt = ["3", "1800" , "7200", "7200", "10800", "14400"]
    let kk = "09999999999999"
    let url = "http://www.simonzhang.net/door?"
    
    @IBAction func dangdang(sender: AnyObject) {
        // 获取要开发的时间
        let row:Int = self.timePicker.selectedRowInComponent(0)
        let getSec=buildInt[row]
        // 获取当前两位小时和分
        let Hour:NSDate = NSDate()
        let Min:NSDate = NSDate()
        let dateForm=NSDateFormatter()
        dateForm.dateFormat="HH"
        let getHour=dateForm.stringFromDate(Hour)
        dateForm.dateFormat="mm"
        let getMin=dateForm.stringFromDate(Min)
        // 拼接要加密的穿
        let ss=kk+getHour+getMin
        let authMd5 = ss.MD5
        // 拼接要访问的字符串
        let doorUrl = url+"se="+getSec+"&au="+authMd5!
        // 开始访问
        var returnText = ""
        Alamofire.request(.GET, doorUrl)
            .responseString{ openStatus in
                if openStatus.result.value == "成功"{
                    returnText="成功"
                }else{
                    returnText="失败"
                }
                UIAlertView(title: "敲门结果", message: returnText,
                    delegate: nil, cancelButtonTitle: "确定").show()
        }
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        timePicker=UIPickerView()
        // 定义位置
        self.timePicker.frame = CGRectMake(120, 100, 150, 200)
        // 绑定数据
        self.timePicker.delegate=self
        self.timePicker.dataSource=self
        //设置选择框的默认值
        timePicker.selectRow(3,inComponent:0,animated:true)
        //添加到界面中
        self.view.addSubview(timePicker)
    }
    
    //设置选择框的列数为1列,继承于UIPickerViewDataSource协议
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
    }
    
    // 返回要显示文字的列表
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if (pickerView.tag == 1){
            return buildString.count
        }else{
            return buildString.count
        }
    }
    
    // 返回显示内容
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if (pickerView.tag == 1){
            return "\(buildString[row])"
        }else{
            return "\(buildString[row])"
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

2月 23

swift2 使用webview禁止拖动和缩放等操作

class部分声明实例变量
@IBOutlet weak var web: UIWebView!

//故事版加载后处理
override func viewDidAppear(animated: Bool) {
    // 禁止浏览器拖动
    web.scrollView.bounces=false
    // 禁止缩放
    web.scrollView.bouncesZoom=false
    // 网页内容可以自动适应屏幕
    web.scalesPageToFit=true
    //获取浏览器大小
    let point:CGSize=web.scrollView.contentSize
    // 可以识别页面里面的信息,如果电话,邮件等
    //web.dataDetectorTypes=UIDataDetectorTypes.All
    // 获取 UIWebView 的 UIScrollView 属性 大小
    //let webScroll = web.scrollView
    // 设置 UIWebView 接收的数据是否可以通过手势来调整页面内容大小
    web.scalesPageToFit = true
    // 设置 UIWebView 内是否可以回放媒体
    web.allowsInlineMediaPlayback = false
    // 设置 UIWebView 中的 HTML5 视频是否自动播放
    web.mediaPlaybackRequiresUserAction = true
    // 设置 UIWebView 是否可以使用 Air 播放
    web.mediaPlaybackAllowsAirPlay = false
    // 设置 UIWebView 是否使用同步加载(默认是False)
    //web.suppressesIncrementalRendering = false
    // 设置 UIWebView 在点击视图或者元素时是否显示键盘(默认是True)
    web.keyboardDisplayRequiresUserAction = true
    // 设置 UIWebView 的分页模式
    //web.paginationMode = UIWebPaginationMode.RightToLeft
    // 设置 UIWebView 的分页打破模式
    //web.paginationBreakingMode = UIWebPaginationBreakingMode.Column
    // 设置 UIWebView 的分页长度
    //web.pageLength = 400
    // 设置 UIWebView 每个分页之间的宽度
    //web.gapBetweenPages = 100
}
2月 18

raspberry pi2 安装pyqt 实验

需求:用raspberry做主机,linux操作系统。连接显示器,展示宣传内容,定时刷新。
使用的设备是raspberry pi2 B+ ,python2.7,使用pyqt4做图形化界面。最初本来想用自带的tk,但是不能嵌入web浏览器。如果调用操作系统的浏览器,如果将来要放大、屏蔽按钮等等扩展就不方便了。

首先安装PyQt4开发包
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install python-dev
$ sudo apt-get install qt4-dev-tools

下载并安装SIP
$ wget https://sourceforge.net/projects/pyqt/files/sip/sip-4.17/sip-4.17.tar.gz
$ tar vxf sip-4.17.tar.gz
$ cd sip-4.17
$ python configure.py
$ make all
$ sudo make install
下载安装PyQt4
$ wget https://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.11.4/PyQt-x11-gpl-4.11.4.tar.gz
$ tar vxf PyQt-x11-gpl-4.11.4.tar.gz
$ cd PyQt-x11-gpl-4.11.4
$ python configure.py
$ make all # 耗时real 113m20.864s
$ sudo make install

python代码

#!/bin/env python
# -*- coding:utf-8 -*-
# -------------------------------
# Date:        2016-02-17
# Author:      simonzhang
# Web:         www.simonzhang.net
# Email:       simon-zzm@163.com
# -------------------------------
import sys
from PyQt4.QtWebKit import QWebView
from PyQt4.QtGui import QApplication, QDesktopWidget, QMainWindow
from PyQt4.QtCore import QUrl
# 创建应用
app = QApplication(sys.argv)
# 获取桌面分辨率
getSize = QDesktopWidget().availableGeometry()
w = getSize.width()
h = getSize.height()
# 创建并连接web服务器
browser = QWebView()
browser.load(QUrl(sys.argv[1]))
browser.show()
# 重新设置浏览器大小
browser.resize(w, h)
# 启动应用
app.exec_()

测试:再Linux桌面下在控制台输入

python testPyQt.py http://www.simonzhang.net/test.html

显示正常,需要展示的内容做html页面就可以了。自动刷新部分也写在页面里,一分钟刷新一次。将

放在页面head里面。

随桌面自动带起来。编辑桌面启动的账户下配置.profile

if [ $DISPLAY == ":0" ];then
    python Desktop/testPyQt.py http://www.simonzhang.net/test.html
fi

最终效果
pyqt4刷新

官方pyqt5不支持python2了,只能用python3,但是本人一直在用python2。所以也编译了一下PyQt5做测试。
$ sudo apt-get install qt5-default
两个包地址如下,安装编译方法和上面相同
http://downloads.sourceforge.net/project/pyqt/sip/sip-4.17/sip-4.17.tar.gz
https://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.5.1/PyQt-gpl-5.5.1.tar.gz
编译耗时 120m40.725s

简单测试正常。估计细节还是会有问题。如果要用pyqt5还是直接用python3比较好。此处只为测试。