写程序免不了重要事件发送消息提醒,比如说你的股票已经到了该卖出的价位了等等。当然,你可以去买个短信接口或给iphone装各种app。而本文讲的是一种免费的实时提醒。
1.打开google并登录。进入设置-->账户设置,启用两步验证。(google要求的安全性验证)
2.打开“关联的网站、应用和服务”输入应用的名字,生成应用密码。
3.把密码输入java mail程序中。程序中gmail的smtp设置为:smtp.gmail.com 465 使用SSL。(java mail教程请自行搜索)
这步完成后自动登录gmail发送邮件已经OK,下面来看看怎么收邮件。
4.Iphone免费的邮件接收方式有Exchange和IMAP。显然IMAP及时性太差不能满足要求。而Gmail已经关闭了Exchange方式,不接受新账号申请使用Exchange,搜索支持Exchange的邮箱会发现企鹅公司QQ mail支持Exchange。请看官方设置
5.现在用程序自动登录gmail给自己的QQ邮箱发送一份邮件,Iphone就立即提示收到了。不用花一分钱。
这应该是目前国内唯一可用的免费实时的手机消息提醒,欢迎交流。
今天无聊写了一个列表拼接两种方式的对比,主要是对比一下用“++”和“|”拼接列表的速度,书上说,“++”拼接列表是极为低效的操作。这里我用代码实现了一下,分别用两种方法生成N个零的列表:
%%列表拼接对比 listsTimeCon(N)-> {TimeOne,_} = timer:tc(test,listsCon1,[N]), {TimeTwo,_} = timer:tc(test,listsCon2,[N]), case TimeOne > TimeTwo of true -> io:format("'++',~p~n",[TimeOne - TimeTwo]); _ -> io:format("'[|]',~p~n",[TimeTwo - TimeOne]) end. listsCon1(0)-> []; listsCon1(N)-> [0]++listsCon1(N-1). listsCon2(0)-> []; listsCon2(N)-> [0|listsCon2(N-1)].
编译并运行后结果是,当列表长度较短的时候,“|”的速度比较快,但是当列表长度较长的时候,“++”的拼接速度会比较快,我尝试测试出临界点的时候,发现每次测试的结果也有出入,例如当N等于100000。出现这个问题可能因为内存分配问题,或者是timer:tc/3的使用方式有错,请大神们提点一下小弟,谢谢!
from http://www.cocoachina.com/bbs/read.php?tid=75122
CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文
CGContextMoveToPoint 开始画线
CGContextAddLineToPoint 画直线
CGContextAddEllipseInRect 画一椭圆
CGContextSetLineCap 设置线条终点形状
CGContextSetLineDash 画虚线
CGContextAddRect 画一方框
CGContextStrokeRect 指定矩形
CGContextStrokeRectWithWidth 指定矩形线宽度
CGContextStrokeLineSegments 一些直线
CGContextAddArc 画已曲线 前俩店为中心 中间俩店为起始弧度 最后一数据为0则顺时针画 1则逆时针
CGContextAddArcToPoint(context,0,0, 2, 9, 40);//先画俩条线从point 到 弟1点 , 从弟1点到弟2点的线 切割里面的圆
CGContextSetShadowWithColor 设置阴影
CGContextSetRGBFillColor 这只填充颜色
CGContextSetRGBStrokeColor 画笔颜色设置
CGContextSetFillColorSpace 颜色空间填充
CGConextSetStrokeColorSpace 颜色空间画笔设置
CGContextFillRect 补充当前填充颜色的rect
CGContextSetAlaha 透明度
CGContextTranslateCTM 改变画布位置
CGContextSetLineWidth 设置线的宽度
CGContextAddRects 画多个线
CGContextAddQuadCurveToPoint 画曲线
CGContextStrokePath 开始绘制图片
CGContextDrawPath 设置绘制模式
CGContextClosePath 封闭当前线路
CGContextTranslateCTM(context, 0, rect.size.height); CGContextScaleCTM(context, 1.0, -1.0);反转画布
CGContextSetInterpolationQuality 背景内置颜色质量等级
CGImageCreateWithImageInRect 从原图片中取小图
//字符串的 写入可用 nsstring本身的画图方法
-(CGSize)drawInRect:(CGRect)rect
withFont:(UIFont *)font
lineBreakMode:(UILineBreakMode)lineBreakMode
alignment:(UITextAlignment)alignment;来写进去即可
//对图片放大缩小的功能就是慢了点
UIGraphicsBeginImageContext(newSize);
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
CGColorGetComponents() 返回颜色的各个直 以及透明度 可用只读const float 来接收 是个数组
//画图片
CGImageRef image=CGImageRetain(img.CGImage);
CGContextDrawImage(context, CGRectMake(10.0, height - 100.0, 90.0, 90.0), image);
//实现逐变颜色填充方法 CGContextClip(context);
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGFloat colors[] =
{
204.0 / 255.0, 224.0 / 255.0, 244.0 / 255.0, 1.00,
29.0 / 255.0, 156.0 / 255.0, 215.0 / 255.0, 1.00,
0.0 / 255.0, 50.0 / 255.0, 126.0 / 255.0, 1.00,
};
CGGradientRef gradient = CGGradientCreateWithColorComponents(rgb, colors, NULL, sizeof(colors)/(sizeof(colors[0])*4));
CGColorSpaceRelease(rgb);
CGContextDrawLinearGradient(context, gradient,CGPointMake(0.0,0.0) ,CGPointMake(0.0,self.frame.size.height),
kCGGradientDrawsBeforeStartLocation);
//注: 画完图后,必须
先用CGContextStrokePath来描线,即形状
后用CGContextFillPath来填充形状内的颜色.
//填充一个路径的时候,路径里面的子路径都是独立填充的。
//假如是重叠的路径,决定一个点是否被填充,有两种规则
1,nonzero winding number rule:非零绕数规则,假如一个点被从左到右跨过,计数器+1,从右到左跨过,计数器-1,最后,如果结果是0,那么不填充,如果是非零,那么填充。
2,even-odd rule: 奇偶规则,假如一个点被跨过,那么+1,最后是奇数,那么要被填充,偶数则不填充,和方向没有关系。
CGContextEOFillPath //使用奇偶规则填充当前路径
CGContextFillPath //使用非零绕数规则填充当前路径
CGContextFillRect //填充指定的矩形
CGContextFillRects //填充指定的一些矩形
CGContextFillEllipseInRect //填充指定矩形中的椭圆
CGContextDrawPath //两个参数决定填充规则,kCGPathFill表示用非零绕数规则,kCGPathEOFill表示用奇偶规则,kCGPathFillStroke表示填充,kCGPathEOFillStroke表示描线,不是填充
//设置当一个颜色覆盖上另外一个颜色,两个颜色怎么混合
//默认方式是
result = (alpha * foreground) + (1 - alpha) * background
CGContextSetBlendMode :设置blend mode.
CGContextSaveGState :保存blend mode.
CGContextRestoreGState:在没有保存之前,用这个函数还原blend mode.
CGContextSetBlendMode 混合俩种颜色
CGPathRef:用于向量图,可创建路径,并进行填充或描画(stroke)CGImageRef:用于表示bitmap图像和基于采样数据的bitmap图像遮罩。CGLayerRef:用于表示可用于重复绘制(如背景)和幕后(offscreen)绘制的绘画层CGPatternRef:用于重绘图CGShadingRef、CGGradientRef:用于绘制渐变CGFunctionRef:用于定义回调函数,该函数包含一个随机的浮点值参数。当为阴影创建渐变时使用该类型CGColorRef, CGColorSpaceRef:用于告诉Quartz如何解释颜色CGImageSourceRef,CGImageDestinationRef:用于在Quartz中移入移出数据CGFontRef:用于绘制文本CGPDFDictionaryRef, CGPDFObjectRef, CGPDFPageRef, CGPDFStream, CGPDFStringRef, and CGPDFArrayRef:用于访问PDF的元数据CGPDFScannerRef, CGPDFContentStreamRef:用于解析PDF元数据CGPSConverterRef:用于将PostScript转化成PDF。在iOS中不能使用。
图形状态
Quartz通过修改当前图形状态(current graphics state)来修改绘制操作的结果。图形状态包含用于绘制程序的参数。绘制程序根据这些绘图状态来决定如何渲染结果。例如,当你调用设置填充颜色的函数时,你将改变存储在当前绘图状态中的颜色值。
Graphics Context包含一个绘图状态栈。当Quartz创建一个Graphics Context时,栈为空。当保存图形状态时,Quartz将当前图形状态的一个副本压入栈中。当还原图形状态时,Quartz将栈顶的图形状态出栈。出栈的状态成为当前图形状态。
可使用函数CGContextSaveGState来保存图形状态,CGContextRestoreGState来还原图形状态。
注意:并不是当前绘制环境的所有方面都是图形状态的元素。如,图形状态不包含当前路径(current path)。下面列出了图形状态相关的参数:
Current transformation matrix (CTM):当前转换矩阵Clipping area:裁剪区域Line: 线Accuracy of curve estimation (flatness):曲线平滑度Anti-aliasing setting:反锯齿设置Color: 颜色Alpha value (transparency):透明度Rendering intent:渲染目标Color space: 颜色空间Text: 文本Blend mode:混合模式
Quartz 2D 坐标系统
坐标系统定义是被绘制到Page上的对象的位置及大小范围,如图1-4所示。我们在用户空间坐标系统(user-space coordination system,简称用户空间)中指定图形的位置及大小。坐标值是用浮点数来定义的。