当前位置: 编程技术>移动开发
本页文章导读:
▪截屏存图片到相本或者指定路径 截屏存图片到相册或者指定路径
#import <QuartzCore/QuartzCore.h>
UIGraphicsBeginImageContext(currentView.bounds.size); //currentView当前的view
[currentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewIma.........
▪ [Object-C]@class的含意 [Object-C]@class的含义
在Objective-c中,当一个类需要引用另一个类,即建立复合关系的时候,需要在类的头文件中建立被引用类的指针。 如:
Car.h
#import
@interface Car:NSObject
{
Tire *tires[4];
.........
▪ 【6.13】利用LayoutInflater兑现Layout的切换 【6.13】利用LayoutInflater实现Layout的切换
主要是利用LayoutInflater的inflate方法
相当于findViewById,只不过查找的是layout的资源
LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_I.........
[1]截屏存图片到相本或者指定路径
来源: 互联网 发布时间: 2014-02-18
截屏存图片到相册或者指定路径
存入到指定路径用以下方法:
#import <QuartzCore/QuartzCore.h> UIGraphicsBeginImageContext(currentView.bounds.size); //currentView当前的view [currentView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
存入到指定路径用以下方法:
- (BOOL)writeImage:(UIImage*)image toFileAtPath:(NSString*)aPath { if ((image == nil) || (aPath == nil) || ([aPath isEqualToString:@""])) return NO; @try { NSData *imageData = nil; NSString *ext = [aPath pathExtension]; if ([ext isEqualToString:@"png"]) { imageData = UIImagePNGRepresentation(image); } else { // the rest, we write to jpeg // 0. best, 1. lost. about compress. imageData = UIImageJPEGRepresentation(image, 0); } if ((imageData == nil) || ([imageData length] <= 0)) return NO; [imageData writeToFile:aPath atomically:YES]; return YES; } @catch (NSException *e) { NSLog(@"create thumbnail exception."); } return NO; }
[2] [Object-C]@class的含意
来源: 互联网 发布时间: 2014-02-18
[Object-C]@class的含义
在Objective-c中,当一个类需要引用另一个类,即建立复合关系的时候,需要在类的头文件中建立被引用类的指针。 如: Car.h #import @interface Car:NSObject { Tire *tires[4]; Engine *engine; } … 实现类我们先省略,如果你直接这么编译,编译器会报错,告诉你它不知道Tire和Engine是什么。 这时候有两个选择,一个是import这两个被引用类的头文件,另一个是使用@class声明Tire和Engine是类名。 二者的区别在于: import会包含这个类的所有信息,包括实体变量和方法,而@class只是告诉编译器,其后面声明的名称是类的名称,至于这些类是如何定义的,暂时不用考虑,后面会再告诉你。 在头文件中, 一般只需要知道被引用的类的名称就可以了。 不需要知道其内部的实体变量和方法,所以在头文件中一般使用@class来声明这个名称是类的名称。 而在实现类里面,因为会用到这个引用类的内部的实体变量和方法,所以需要使用#import来包含这个被引用类的头文件。 在编译效率方面考虑,如果你有100个头文件都#import了同一个头文件,或者这些文件是依次引用的,如A–>B, B–>C, C–>D这样的引用关系。当最开始的那个头文件有变化的话,后面所有引用它的类都需要重新编译,如果你的类有很多的话,这将耗费大量的时间。而是用@class则不会。 如果有循环依赖关系,如:A–>B, B–>A这样的相互依赖关系,如果使用#import来相互包含,那么就会出现编译错误,如果使用@class在两个类的头文件中相互声明,则不会有编译错误出现。 所以,一般来说,@class是放在interface中的,只是为了在interface中引用这个类,把这个类作为一个类型来用的。 在实现这个接口的实现类中,如果需要引用这个类的实体变量或者方法之类的,还是需要import在@class中声明的类进来. 如: a.h @class Rectangle; @interface A : NSObject { … } a.m #import Rectangle @implementation A
转自: http://blog.sina.com.cn/s/blog_69081e060100p4r1.html
[3] 【6.13】利用LayoutInflater兑现Layout的切换
来源: 互联网 发布时间: 2014-02-18
【6.13】利用LayoutInflater实现Layout的切换
主要是利用LayoutInflater的inflate方法
相当于findViewById,只不过查找的是layout的资源
LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
linearLayout1 = (LinearLayout) mLayoutInflater.inflate(R.layout.main, null);
linearLayout2 = (LinearLayout) mLayoutInflater.inflate(R.layout.main2, null);
再通过检测动作,执行setContentView(layout),可以完成切换
最新技术文章: