1、获取View所在的Controller
+ (UIViewController *)getViewController:(UIView *)view{
for (UIView *next = [view superview]; next; next = next.superview) {
UIResponder *nextResponder = [next nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]]) {
return (UIViewController *)nextResponder;
}
}
return nil;
}
2、高效的圆角方式
+ (CAShapeLayer *)paintingCircularWithBounds:(CGRect)bounds cornerRadius:(CGFloat)cornerRadius{
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:bounds cornerRadius:cornerRadius];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
maskLayer.path = maskPath.CGPath;
return maskLayer;
}
3、时间的处理
.h文件
/** 获取当前的时间 */
+ (NSString *)currentDateString;
/** 按指定格式获取当前的时间 */
+ (NSString *)currentDateStringWithFormat:(NSString *)formatterStr;
/** 获取固定格式的时间格式*/
+ (NSString *)dateWithDateString:(NSString *)dataString;
/**
* 是否为今天
*/
- (BOOL)isToday;
/**
* 是否为昨天
*/
- (BOOL)isYesterday;
/**
* 是否为今年
*/
- (BOOL)isThisYear;
/**
* 返回一个只有年月日的时间
*/
- (NSDate *)dateWithYMD;
/**
* 获得与当前时间的差距
*/
- (NSDateComponents *)deltaWithNow;
/**
* 获取与当前时间的对比
*/
+ (NSString *)dateWithString:(NSString *)dataString;
/**
* 时间戳转换成时间
*/
+ (id)timeStampTransformationTimeWithtimeString:(NSString *)timeString;
+ (id)timeStampTransformationYMDTimeWithtimeString:(NSString *)timeString; //只返回年月日
/**
* 当前时间转时间戳
*/
+ (NSString *)getCurrentDate;
.m文件
#pragma mark - 获取当前的时间
+ (NSString *)currentDateString {
return [self currentDateStringWithFormat:@"yyyy-MM-dd HH:mm:ss"];
}
#pragma mark - 按指定格式获取当前的时间
+ (NSString *)currentDateStringWithFormat:(NSString *)formatterStr {
// 获取系统当前时间
NSDate *currentDate = [NSDate date];
// 用于格式化NSDate对象
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置格式:yyyy-MM-dd HH:mm:ss
formatter.dateFormat = formatterStr;
// 将 NSDate 按 formatter格式 转成 NSString
NSString *currentDateStr = [formatter stringFromDate:currentDate];
// 输出currentDateStr
return currentDateStr;
}
+ (NSString *)dateWithDateString:(NSString *)dataString{
// 用于格式化NSDate对象
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 设置格式:yyyy-MM-dd HH:mm:ss
formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss";
// 将 NSDate 按 formatter格式 转成 NSString
NSString *currentDateStr = [formatter stringFromDate:[formatter dateFromString:dataString]];
// 输出currentDateStr
return currentDateStr;
}
/**
* 是否为今天
*/
- (BOOL)isToday
{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear;
// 1.获得当前时间的年月日
NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
// 2.获得self的年月日
NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
return
(selfCmps.year == nowCmps.year) &&
(selfCmps.month == nowCmps.month) &&
(selfCmps.day == nowCmps.day);
}
/**
* 是否为昨天
*/
- (BOOL)isYesterday
{
// 2014-05-01
NSDate *nowDate = [[NSDate date] dateWithYMD];
// 2014-04-30
NSDate *selfDate = [self dateWithYMD];
// 获得nowDate和selfDate的差距
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *cmps = [calendar components:NSCalendarUnitDay fromDate:selfDate toDate:nowDate options:0];
return cmps.day == 1;
}
- (NSDate *)dateWithYMD
{
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd";
NSString *selfStr = [fmt stringFromDate:self];
return [fmt dateFromString:selfStr];
}
/**
* 是否为今年
*/
- (BOOL)isThisYear
{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitYear;
// 1.获得当前时间的年月日
NSDateComponents *nowCmps = [calendar components:unit fromDate:[NSDate date]];
// 2.获得self的年月日
NSDateComponents *selfCmps = [calendar components:unit fromDate:self];
return nowCmps.year == selfCmps.year;
}
- (NSDateComponents *)deltaWithNow
{
NSCalendar *calendar = [NSCalendar currentCalendar];
int unit = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
return [calendar components:unit fromDate:self toDate:[NSDate date] options:0];
}
+ (NSString *)dateWithString:(NSString *)dataString{
//日期格式
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.dateFormat = @"yyyy-MM-dd HH:mm:ss";
NSDate *created_at = [fmt dateFromString:dataString];
if ([created_at isThisYear]) {
//今年
if ([created_at isToday]) {
//今天
//计算跟当前时间的差距
NSDateComponents *cmp = [created_at deltaWithNow];
if (cmp.hour > 0 && cmp.hour < 24) {
return [NSString stringWithFormat:@"%ld小时前",(long)cmp.hour];
} else if (cmp.minute > 0 && cmp.minute < 60){
return [NSString stringWithFormat:@"%ld分钟前",(long)cmp.minute];
} else {
return @"刚刚";
}
} else if ([created_at isYesterday]){
//昨天
fmt.dateFormat = @"昨天 HH:mm";
return [fmt stringFromDate:created_at];
} else {
//昨天以前
fmt.dateFormat = @"MM-dd HH:mm";
return [fmt stringFromDate:created_at];
}
} else {
//不是今年
fmt.dateFormat = @"yyyy-MM-dd HH:mm";
return [fmt stringFromDate:created_at];
}
}
+ (id)timeStampTransformationTimeWithtimeString:(NSString *)timeString {
//将时间蹉转换成标准时间
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[timeString intValue]];
return [formatter stringFromDate:confromTimesp];
}
+ (id)timeStampTransformationYMDTimeWithtimeString:(NSString *)timeString {
//将时间蹉转换成标准时间
NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate *confromTimesp = [NSDate dateWithTimeIntervalSince1970:[timeString intValue]];
return [formatter stringFromDate:confromTimesp];
}
+ (NSString *)getCurrentDate{
//获取当前时间
NSDate *datenow = [NSDate date];
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[datenow timeIntervalSince1970]];
return timeSp;
}
4、获取手机各种信息的方法
PhoneMessage.h
#import <Foundation/Foundation.h>
#define WLY_USER_ID @"WLY_USER_ID"
#define WLY_PHONE_NUM @"WLY_PHONE_NUM"
#define WLY_UUID @"WLY_UUID"
#define WLY_APP_VERSION @"WLY_APP_VERSION"
#define WLY_PHONE_TYPE @"WLY_PHONE_TYPE"
#define WLY_APP_SIGN @"WLY_APP_SIGN"
#define WLY_OS_TYPE @"WLY_OS_TYPE"
#define WLY_MAC_TYPE @"WLY_MAC_TYPE"
#define WLY_DEVICEIP_TYPE @"WLY_DEVICEIP_TYPE"
#define WLY_SCREEN_TYPE @"WLY_SCREEN_TYPE"
@interface PhoneMessage : NSObject
//获取手机的mac地址
+ (NSString *)getAppinfo;
+ (MicPhoneMessage*)shareManage;
@end
PhoneMessage.m
#import "PhoneMessage.h"
#import "sys/utsname.h"
#import <AdSupport/AdSupport.h>
#import <CoreLocation/CoreLocation.h>
#import <MapKit/MapKit.h>
#import <ifaddrs.h>
#import <arpa/inet.h>
#import <sys/sockio.h>
#import <sys/ioctl.h>
#include <sys/socket.h> // Per msqr
#include <sys/sysctl.h>
#include <net/if.h>
#include <net/if_dl.h>
#define IOS_CELLULAR @"pdp_ip0"
#define IOS_WIFI @"en0"
//#define IOS_VPN @"utun0"
#define IP_ADDR_IPv4 @"ipv4"
#define IP_ADDR_IPv6 @"ipv6"
@interface PhoneMessage () <CLLocationManagerDelegate>
@property (nonatomic, strong) NSDictionary *phoneDict;
@end
@implementation PhoneMessage
- (NSDictionary *)phoneDict{
if (!_phoneDict) {
_phoneDict = [self getAppInfo];
}
return _phoneDict;
}
+ (NSDictionary *)getAppinfo {
return [MicPhoneMessage shareManage].phoneDict;
}
//单例的初始化方法,有很多种,但是这个是苹果官方推荐的。
+ (MicPhoneMessage*)shareManage{
static MicPhoneMessage *phoneInstance = nil;
static dispatch_once_t predicate;
dispatch_once(&predicate, ^{
phoneInstance = [[self alloc] init];
});
return phoneInstance;
}
- (NSString *)getMacAddress{
int mib[6];
size_t len;
char *buf;
unsigned char *ptr;
struct if_msghdr *ifm;
struct sockaddr_dl *sdl;
mib[0] = CTL_NET;
mib[1] = AF_ROUTE;
mib[2] = 0;
mib[3] = AF_LINK;
mib[4] = NET_RT_IFLIST;
if ((mib[5] = if_nametoindex("en0")) == 0) {
printf("Error: if_nametoindex error/n");
return NULL;
}
if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
printf("Error: sysctl, take 1/n");
return NULL;
}
if ((buf = malloc(len)) == NULL) {
printf("Could not allocate memory. error!/n");
return NULL;
}
if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
printf("Error: sysctl, take 2");
return NULL;
}
ifm = (struct if_msghdr *)buf;
sdl = (struct sockaddr_dl *)(ifm + 1);
ptr = (unsigned char *)LLADDR(sdl);
NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x", *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
free(buf);
return [outstring uppercaseString];
}
//获取ip地址
//获取设备当前网络IP地址
- (NSString *)getIPAddress:(BOOL)preferIPv4
{
NSArray *searchArray = preferIPv4 ?
@[ /*IOS_VPN @"/" IP_ADDR_IPv4, IOS_VPN @"/" IP_ADDR_IPv6,*/ IOS_WIFI @"/" IP_ADDR_IPv4, IOS_WIFI @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6 ] :
@[ /*IOS_VPN @"/" IP_ADDR_IPv6, IOS_VPN @"/" IP_ADDR_IPv4,*/ IOS_WIFI @"/" IP_ADDR_IPv6, IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv6, IOS_CELLULAR @"/" IP_ADDR_IPv4 ] ;
NSDictionary *addresses = [self getIPAddresses];
NSLog(@"addresses: %@", addresses);
__block NSString *address;
[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop)
{
address = addresses[key];
if(address) *stop = YES;
} ];
return address ? address : @"0.0.0.0";
}
//获取所有相关IP信息
- (NSDictionary *)getIPAddresses
{
NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];
// retrieve the current interfaces - returns 0 on success
struct ifaddrs *interfaces;
if(!getifaddrs(&interfaces)) {
// Loop through linked list of interfaces
struct ifaddrs *interface;
for(interface=interfaces; interface; interface=interface->ifa_next) {
if(!(interface->ifa_flags & IFF_UP) /* || (interface->ifa_flags & IFF_LOOPBACK) */ ) {
continue; // deeply nested code harder to read
}
const struct sockaddr_in *addr = (const struct sockaddr_in*)interface->ifa_addr;
char addrBuf[ MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN) ];
if(addr && (addr->sin_family==AF_INET || addr->sin_family==AF_INET6)) {
NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
NSString *type;
if(addr->sin_family == AF_INET) {
if(inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
type = IP_ADDR_IPv4;
}
} else {
const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6*)interface->ifa_addr;
if(inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
type = IP_ADDR_IPv6;
}
}
if(type) {
NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
addresses[key] = [NSString stringWithUTF8String:addrBuf];
}
}
}
// Free memory
freeifaddrs(interfaces);
}
return [addresses count] ? addresses : nil;
}
- (void)getDeviceInfo
{
// 这个方法后面会列出来
NSString *deviceName = [self getDeviceName];
NSLog(@"设备型号-->%@", deviceName);
NSString *iPhoneName = [UIDevice currentDevice].name;
NSLog(@"iPhone名称-->%@", iPhoneName);
NSString *appVerion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
NSLog(@"app版本号-->%@", appVerion);
NSString *appSign = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleSignature"];
NSLog(@"app签名信息-->%@",appSign);
CGFloat batteryLevel = [[UIDevice currentDevice] batteryLevel];
NSLog(@"电池电量-->%f", batteryLevel);
NSString *localizedModel = [UIDevice currentDevice].localizedModel;
NSLog(@"localizedModel-->%@", localizedModel);
NSString *systemName = [UIDevice currentDevice].systemName;
NSLog(@"当前系统名称-->%@", systemName);
NSString *systemVersion = [UIDevice currentDevice].systemVersion;
NSLog(@"当前系统版本号-->%@", systemVersion);
NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
NSLog(@"唯一识别码uuid-->%@", uuid);
struct utsname systemInfo;
uname(&systemInfo);
NSString *device_model = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
NSLog(@"device_model-->%@", device_model);
// 这个方法后面会单独列出
NSString *macAddress = [self getMacAddress];
NSLog(@"macAddress-->%@", macAddress);
// 这个方法后面会单独列出
NSString *deviceIP = [self getDeviceIPAddresses];
NSLog(@"deviceIP-->%@", deviceIP);
}
- (NSString *)getOSInfo
{
NSString *versionStr = [[UIDevice currentDevice] systemVersion];
// NSString *versionStr = [[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString *)kCFBundleVersionKey];
return versionStr;
}
// 获取设备型号然后手动转化为对应名称
- (NSString *)getDeviceName
{
// 需要#import "sys/utsname.h"
struct utsname systemInfo;
uname(&systemInfo);
NSString *deviceString = [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding];
if ([deviceString isEqualToString:@"iPhone3,1"]) return @"iPhone 4";
if ([deviceString isEqualToString:@"iPhone3,2"]) return @"iPhone 4";
if ([deviceString isEqualToString:@"iPhone3,3"]) return @"iPhone 4";
if ([deviceString isEqualToString:@"iPhone4,1"]) return @"iPhone 4S";
if ([deviceString isEqualToString:@"iPhone5,1"]) return @"iPhone 5";
if ([deviceString isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)";
if ([deviceString isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)";
if ([deviceString isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus";
if ([deviceString isEqualToString:@"iPhone7,2"]) return @"iPhone 6";
if ([deviceString isEqualToString:@"iPhone8,1"]) return @"iPhone 6s";
if ([deviceString isEqualToString:@"iPhone8,2"]) return @"iPhone 6s Plus";
if ([deviceString isEqualToString:@"iPhone8,4"]) return @"iPhone SE";
// 日行两款手机型号均为日本独占,可能使用索尼FeliCa支付方案而不是苹果支付
if ([deviceString isEqualToString:@"iPhone9,1"]) return @"国行、日版、港行iPhone 7";
if ([deviceString isEqualToString:@"iPhone9,2"]) return @"港行、国行iPhone 7 Plus";
if ([deviceString isEqualToString:@"iPhone9,3"]) return @"美版、台版iPhone 7";
if ([deviceString isEqualToString:@"iPhone9,4"]) return @"美版、台版iPhone 7 Plus";
if ([deviceString isEqualToString:@"iPod1,1"]) return @"iPod Touch 1G";
if ([deviceString isEqualToString:@"iPod2,1"]) return @"iPod Touch 2G";
if ([deviceString isEqualToString:@"iPod3,1"]) return @"iPod Touch 3G";
if ([deviceString isEqualToString:@"iPod4,1"]) return @"iPod Touch 4G";
if ([deviceString isEqualToString:@"iPod5,1"]) return @"iPod Touch (5 Gen)";
if ([deviceString isEqualToString:@"iPad1,1"]) return @"iPad";
if ([deviceString isEqualToString:@"iPad1,2"]) return @"iPad 3G";
if ([deviceString isEqualToString:@"iPad2,1"]) return @"iPad 2 (WiFi)";
if ([deviceString isEqualToString:@"iPad2,2"]) return @"iPad 2";
if ([deviceString isEqualToString:@"iPad2,3"]) return @"iPad 2 (CDMA)";
if ([deviceString isEqualToString:@"iPad2,4"]) return @"iPad 2";
if ([deviceString isEqualToString:@"iPad2,5"]) return @"iPad Mini (WiFi)";
if ([deviceString isEqualToString:@"iPad2,6"]) return @"iPad Mini";
if ([deviceString isEqualToString:@"iPad2,7"]) return @"iPad Mini (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPad3,1"]) return @"iPad 3 (WiFi)";
if ([deviceString isEqualToString:@"iPad3,2"]) return @"iPad 3 (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPad3,3"]) return @"iPad 3";
if ([deviceString isEqualToString:@"iPad3,4"]) return @"iPad 4 (WiFi)";
if ([deviceString isEqualToString:@"iPad3,5"]) return @"iPad 4";
if ([deviceString isEqualToString:@"iPad3,6"]) return @"iPad 4 (GSM+CDMA)";
if ([deviceString isEqualToString:@"iPad4,1"]) return @"iPad Air (WiFi)";
if ([deviceString isEqualToString:@"iPad4,2"]) return @"iPad Air (Cellular)";
if ([deviceString isEqualToString:@"iPad4,4"]) return @"iPad Mini 2 (WiFi)";
if ([deviceString isEqualToString:@"iPad4,5"]) return @"iPad Mini 2 (Cellular)";
if ([deviceString isEqualToString:@"iPad4,6"]) return @"iPad Mini 2";
if ([deviceString isEqualToString:@"iPad4,7"]) return @"iPad Mini 3";
if ([deviceString isEqualToString:@"iPad4,8"]) return @"iPad Mini 3";
if ([deviceString isEqualToString:@"iPad4,9"]) return @"iPad Mini 3";
if ([deviceString isEqualToString:@"iPad5,1"]) return @"iPad Mini 4 (WiFi)";
if ([deviceString isEqualToString:@"iPad5,2"]) return @"iPad Mini 4 (LTE)";
if ([deviceString isEqualToString:@"iPad5,3"]) return @"iPad Air 2";
if ([deviceString isEqualToString:@"iPad5,4"]) return @"iPad Air 2";
if ([deviceString isEqualToString:@"iPad6,3"]) return @"iPad Pro 9.7";
if ([deviceString isEqualToString:@"iPad6,4"]) return @"iPad Pro 9.7";
if ([deviceString isEqualToString:@"iPad6,7"]) return @"iPad Pro 12.9";
if ([deviceString isEqualToString:@"iPad6,8"]) return @"iPad Pro 12.9";
if ([deviceString isEqualToString:@"i386"]) return @"Simulator";
if ([deviceString isEqualToString:@"x86_64"]) return @"Simulator";
return deviceString;
}
- (NSString *)getDeviceIPAddresses {
int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
NSMutableArray *ips = [NSMutableArray array];
int BUFFERSIZE = 4096;
struct ifconf ifc;
char buffer[BUFFERSIZE], *ptr, lastname[IFNAMSIZ], *cptr;
struct ifreq *ifr, ifrcopy;
ifc.ifc_len = BUFFERSIZE;
ifc.ifc_buf = buffer;
if (ioctl(sockfd, SIOCGIFCONF, &ifc) >= 0){
for (ptr = buffer; ptr < buffer + ifc.ifc_len; ){
ifr = (struct ifreq *)ptr;
int len = sizeof(struct sockaddr);
if (ifr->ifr_addr.sa_len > len) {
len = ifr->ifr_addr.sa_len;
}
ptr += sizeof(ifr->ifr_name) + len;
if (ifr->ifr_addr.sa_family != AF_INET) continue;
if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL) *cptr = 0;
if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == 0) continue;
memcpy(lastname, ifr->ifr_name, IFNAMSIZ);
ifrcopy = *ifr;
ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy);
if ((ifrcopy.ifr_flags & IFF_UP) == 0) continue;
NSString *ip = [NSString stringWithFormat:@"%s", inet_ntoa(((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr)];
[ips addObject:ip];
}
}
close(sockfd);
NSString *deviceIP = @"";
for (int i=0; i < ips.count; i++) {
if (ips.count > 0) {
deviceIP = [NSString stringWithFormat:@"%@",ips.lastObject];
}
}
return deviceIP;
}
//获取登陆用户id
- (NSString *)getUserid
{
// GlobleData *shared = [GlobleData sharedInstance];
// NSString *userid = shared.userid;
return @"aaaa";
}
//获取登陆用户手机号
- (NSString *)getPhoneNum
{
NSUserDefaults *userDefaultes = [NSUserDefaults standardUserDefaults];
NSString *uid = [userDefaultes objectForKey:@"usr.loginid"];
return uid;
}
//获取设备惟一标示符
- (NSString *)getUUID
{
NSString *uuid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
return uuid;
}
//获取app版本号
- (NSString *)getVersion
{
NSString *appVerion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
return appVerion;
}
- (NSString *)getScreen{
if (iPhone4) {
return @"3.5英寸";
} else if (iPhone5) {
return @"4.0英寸";
} else if (iPhone6){
return @"4.7英寸";
} else if (iPhone6P){
return @"5.5英寸";
}
return @"未识别";
}
- (void)getlocation{
}
//获取用户手机号,uuid,手机型号,版本号,签名,平台(ios/android)
- (NSDictionary *)getAppInfo
{
NSMutableDictionary *appInfoDict = [[NSMutableDictionary alloc] init];
// NSString *phonenum = [self getPhoneNum];
NSString *uuid = [self getUUID];
NSString *deviceType = [self getDeviceName];
NSString *version = [self getVersion];
NSString *appsign = @"B";
NSString *platform = @"1";
// NSString *userid = [self getUserid];
NSString *macAddress = [self getMacAddress];
NSString *deviceIPAddresses = [self getDeviceIPAddresses];
NSString *screenString = [self getScreen];
// [appInfoDict setObject:userid forKey:WLY_USER_ID];
// [appInfoDict setObject:phonenum forKey:WLY_PHONE_NUM];
[appInfoDict setObject:uuid forKey:WLY_UUID];
[appInfoDict setObject:version forKey:WLY_APP_VERSION];
[appInfoDict setObject:deviceType forKey:WLY_PHONE_TYPE];
[appInfoDict setObject:appsign forKey:WLY_APP_SIGN];
[appInfoDict setObject:platform forKey:WLY_OS_TYPE];
[appInfoDict setObject:macAddress forKey:WLY_MAC_TYPE];
[appInfoDict setObject:deviceIPAddresses forKey:WLY_DEVICEIP_TYPE];
[appInfoDict setObject:screenString forKey:WLY_SCREEN_TYPE];
// NSLog(@"getAppInfo:%@",appInfoDict);
return appInfoDict;
}
-(void)_startLocation
{
if([CLLocationManager locationServicesEnabled])
{
// 启动位置更新
// 开启位置更新需要与服务器进行轮询所以会比较耗电,在不需要时用stopUpdatingLocation方法关闭;
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
//设置定位的精度
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
locationManager.distanceFilter = 10.0f;
locationManager.delegate = self;
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 8.0)
{
[locationManager requestAlwaysAuthorization];
[locationManager requestWhenInUseAuthorization];
}
//开始实时定位
[locationManager startUpdatingLocation];
}else {
NSLog(@"请开启定位功能!");
}
}
@end
5、富文本和字符串的处理
.h文件
/**
* 设置颜色的字符串
* @string 总字符串
* @textColorDict 修改的字符串和颜色
*
* @{@"key":@"value"} => @{@"str": color}
* @str:修改颜色的字符串
* @color:颜色
*/
+ (NSAttributedString *)attributedStringChangePortionTextColor:(NSString *)string textColorDict:(NSDictionary *)textColorDict;
/**
* 两端对齐
*
* @prame string 需要对齐的字符串
**/
+ (NSAttributedString *)attributedStringAlignmentBothWithString:(NSString *)string;
/**
* 设置文本行间距
*
* @prame lineSpacing 行间距
* @prame font 字体大小
* @prame textString 字符串
*/
+ (NSAttributedString *)attributedStringLineSpacing:(CGFloat)lineSpacing font:(CGFloat)font textString:(NSString *)textString;
/**
* 计算固定宽的字符串大小
*
* @prame sizeWidth 宽
* @prame font 字体大小
* @prame textString 字符串
* @prame lineSpacing 行间距
*/
+ (CGSize)textStringFixedWidthWithSize:(CGFloat)sizeWidth font:(CGFloat)font textString:(NSString *)textString lineSpacing:(CGFloat)lineSpacing;
.m文件
+ (NSAttributedString *)attributedStringChangePortionTextColor:(NSString *)string textColorDict:(NSDictionary *)textColorDict{
NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:string];
//获取要调整的文字和颜色
NSArray *textArray = [textColorDict allKeys];
NSArray *colorArray = [textColorDict allValues];
int index = 0;
//获取要调整颜色的文字位置
for (NSString *text in textArray) {
NSRange range = [string rangeOfString:text];
[aString addAttribute:NSForegroundColorAttributeName value:colorArray[index] range:range];
index ++;
}
return aString;
}
+ (NSAttributedString *)attributedStringAlignmentBothWithString:(NSString *)string{
NSMutableAttributedString *aString = [[NSMutableAttributedString alloc] initWithString:string];
NSMutableParagraphStyle *pStyle = [[NSMutableParagraphStyle alloc] init];
pStyle.alignment = NSTextAlignmentJustified; // 两端对齐
NSDictionary *dict = @{NSParagraphStyleAttributeName : pStyle};
[aString setAttributes:dict range:NSMakeRange(0, string.length)];
return aString;
}
+ (NSAttributedString *)attributedStringLineSpacing:(CGFloat)lineSpacing font:(CGFloat)font textString:(NSString *)textString{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:lineSpacing];//行间距
paragraphStyle.alignment = NSTextAlignmentJustified;//文本对齐方式 左右对齐(两边对齐)
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:textString];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [textString length])];//设置段落样式
[attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:font] range:NSMakeRange(0, [textString length])];//设置字体大小
[attributedString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleNone] range:NSMakeRange(0, [textString length])];
return attributedString;
}
+ (CGSize)textStringFixedWidthWithSize:(CGFloat)sizeWidth font:(CGFloat)font textString:(NSString *)textString lineSpacing:(CGFloat)lineSpacing{
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:lineSpacing];//行间距
paragraphStyle.alignment = NSTextAlignmentJustified;//文本对齐方式 左右对齐(两边对齐)
return [textString boundingRectWithSize:CGSizeMake(sizeWidth, MAXFLOAT) options:NSStringDrawingUsesFontLeading|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:font],NSParagraphStyleAttributeName:paragraphStyle} context:nil].size;
}
6、对图片的处理
.h文件
/**
** lineView: 需要绘制成虚线的view
** lineLength: 虚线的宽度
** lineSpacing: 虚线的间距
** lineColor: 虚线的颜色
**/
+ (void)drawDashLine:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor;
//绘制图片
+(UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size;
#pragma mark 参数view即我们要截取的控件以及控件上的所有视图
+ (UIImage *)imageFromView:(UIView *)view withFrame:(CGRect)theFrame;
//渐变
+ (UIImage *)imageFromColors:(NSArray *)colors ByGradientType:(GradientType)gradientType size:(CGSize)size;
//渲染image
+ (UIImage *)imageWithImage:(UIImage *)image tintColor:(UIColor *)color;
//修改图片颜色
- (UIImage *)imageWithColor:(UIColor *)color;
//裁剪图片
+ (UIImage *)clipWithImageRect:(CGRect)imageRect clipRect:(CGRect)clipRect clipImage:(UIImage *)clipImage;
/**
* 在一张背景图上绘制文字并且居中
*
* @param str 要绘制到图片上的文字
* @param image 背景图片
* @param fontSize 文字的大小
* @param textColor 文字颜色
*
* @return 绘制上文字的图片
*/
+ (UIImage *)createOtherMerchantImage:(NSString *)str withBgImage:(UIImage *)image withFont:(CGFloat)fontSize withTextColor:(UIColor *)textColor;
.m文件
/**
** lineView: 需要绘制成虚线的view
** lineLength: 虚线的宽度
** lineSpacing: 虚线的间距
** lineColor: 虚线的颜色
**/
+ (void)drawDashLine:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)lineSpacing lineColor:(UIColor *)lineColor
{
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
[shapeLayer setBounds:lineView.bounds];
[shapeLayer setPosition:CGPointMake(CGRectGetWidth(lineView.frame) / 2, CGRectGetHeight(lineView.frame))];
[shapeLayer setFillColor:[UIColor clearColor].CGColor];
// 设置虚线颜色为blackColor
[shapeLayer setStrokeColor:lineColor.CGColor];
// 设置虚线宽度
[shapeLayer setLineWidth:CGRectGetHeight(lineView.frame)];
[shapeLayer setLineJoin:kCALineJoinRound];
// 设置线宽,线间距
[shapeLayer setLineDashPattern:[NSArray arrayWithObjects:[NSNumber numberWithInt:lineLength], [NSNumber numberWithInt:lineSpacing], nil]];
// 设置路径
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, 0, 0);
CGPathAddLineToPoint(path, NULL,CGRectGetWidth(lineView.frame), 0);
[shapeLayer setPath:path];
CGPathRelease(path);
// 把绘制好的虚线添加上来
[lineView.layer addSublayer:shapeLayer];
}
+ (UIImage *)imageWithColor:(UIColor *)color size:(CGSize)size{
CGRect rect=CGRectMake(0.0f, 0.0f, size.width, size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage*theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return theImage;
}
#pragma mark 参数view即我们要截取的控件以及控件上的所有视图
+ (UIImage *)imageFromView:(UIView *)view withFrame:(CGRect)theFrame
{
UIImage* image = nil;//最终返回的image
//设置截取尺寸
CGSize size = CGSizeMake(theFrame.size.width, theFrame.size.height);
//高清处理
UIGraphicsBeginImageContextWithOptions(size, YES, [UIScreen mainScreen].scale);
[view.layer renderInContext: UIGraphicsGetCurrentContext()];
//得到图片
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
+ (UIImage *)imageFromColors:(NSArray *)colors ByGradientType:(GradientType)gradientType size:(CGSize)size{
NSMutableArray *ar = [NSMutableArray array];
for(UIColor *c in colors) {
[ar addObject:(id)c.CGColor];
}
UIGraphicsBeginImageContextWithOptions(size, YES, 1);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);
CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)ar, NULL);
CGPoint start;
CGPoint end;
switch (gradientType) {
case 0:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(0.0, size.height);
break;
case 1:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(size.width, 0.0);
break;
case 2:
start = CGPointMake(0.0, 0.0);
end = CGPointMake(size.width, size.height);
break;
case 3:
start = CGPointMake(size.width, 0.0);
end = CGPointMake(0.0, size.height);
break;
default:
break;
}
CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
CGGradientRelease(gradient);
CGContextRestoreGState(context);
CGColorSpaceRelease(colorSpace);
UIGraphicsEndImageContext();
return image;
}
//渲染image
+ (UIImage *)imageWithImage:(UIImage *)image tintColor:(UIColor *)color {
UIGraphicsBeginImageContextWithOptions(image.size,NO, image.scale);
CGContextRef context =UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, image.size.height);
CGContextScaleCTM(context, 1, -1);
CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
CGContextClipToMask(context, rect, image.CGImage);
UIRectFillUsingBlendMode(rect,kCGBlendModeNormal);
UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
- (UIImage *)imageWithColor:(UIColor *)color
{
UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0, self.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
CGContextClipToMask(context, rect, self.CGImage);
[color setFill];
CGContextFillRect(context, rect);
UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
//裁剪图片
+ (UIImage *)clipWithImageRect:(CGRect)imageRect clipRect:(CGRect)clipRect clipImage:(UIImage *)clipImage{
// 开启位图上下文
UIGraphicsBeginImageContextWithOptions(imageRect.size, NO, 0);
// 设置裁剪区域
UIBezierPath *path = [UIBezierPath bezierPathWithRect:clipRect];
[path addClip];
// 绘制图片
[clipImage drawInRect:clipRect];
// 获取当前图片
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
return image;
}
//文字转换成图片
+ (UIImage *)createOtherMerchantImage:(NSString *)str withBgImage:(UIImage *)image withFont:(CGFloat)fontSize withTextColor:(UIColor *)textColor{
CGSize size= CGSizeMake (image.size.width , image.size.height ); // 画布大小
UIGraphicsBeginImageContextWithOptions (size, NO , 0.0 );
[image drawAtPoint : CGPointMake ( 0 , 0 )];
// 获得一个位图图形上下文
CGContextRef context= UIGraphicsGetCurrentContext ();
CGContextDrawPath (context, kCGPathStroke );
//画自己想画的内容。。。。。
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
paragraphStyle.alignment = NSTextAlignmentCenter;
UIFont *font = [UIFont boldSystemFontOfSize:fontSize];//定义默认字体
//计算文字的宽度和高度:支持多行显示
CGSize sizeText = [str boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{
NSFontAttributeName:font,//设置文字的字体
NSKernAttributeName:@3,//文字之间的字距
}
context:nil].size;
//为了能够垂直居中,需要计算显示起点坐标x,y
CGRect rect = CGRectMake((size.width-sizeText.width)/2, (size.height-sizeText.height)/2, sizeText.width, sizeText.height);
[str drawInRect:rect withAttributes:@{ NSFontAttributeName :[UIFont systemFontOfSize:fontSize], NSForegroundColorAttributeName :textColor,NSParagraphStyleAttributeName:paragraphStyle} ];
//画自己想画的内容。。。。。
// 返回绘制的新图形
UIImage *newImage= UIGraphicsGetImageFromCurrentImageContext ();
UIGraphicsEndImageContext ();
return newImage;
}
网友评论