应用键横竖屏切换;label中显示图片;不同类型设备适配的代码;UIWebView字体大小、字体颜色、背景色的设置;

最近总结的工作中遇到的小问题在这里共享 ,希望对大家能有帮助

1.横屏的一个应用在修改个人资料过程从相册取图片或者拍照的过程中,横纵屏切换引起再次进入程序时应用变纵屏的bug

--------------主页面控制器中点击进入个人资料页面的地方:----------------------

- (void)changepersonIcon{

UIActionSheet*actionSheet = [[UIActionSheetalloc]

initWithTitle:@"选择封面图片"

delegate:self

cancelButtonTitle:@"取消"

destructiveButtonTitle:nil

otherButtonTitles:@"相机",@"相册",nil];

actionSheet.actionSheetStyle=
UIActionSheetStyleDefault;

[actionSheet
showInView:self.view];

}

-(void) actionSheet:(UIActionSheet*)actionSheet
clickedButtonAtIndex:(NSInteger)buttonIndex{

if ( buttonIndex ==0) {

NSLog(@"相机");

[selfsetShuping]; //设置纵屏

[selfselectCamera];

}elseif( buttonIndex ==1){

NSLog(@"照片");

[selfsetShuping];//设置纵屏

[selfselectPhotos];

}else{

NSLog(@"取消了啊啊");

}

}

//设置纵屏去记录  把屏幕状态存储下来,在视图将要出现的时候移除记录的状态

-(void) setShuping{

[selfsaveValue:@"hengping"WithKey:@"hengping"];}

-(void) saveValue:(NSObject*)
value WithKey:(NSString*) key  {

NSUserDefaults * def = [NSUserDefaultsstandardUserDefaults];

[def
setObject:valueforKey:key];

[def
synchronize];

}

//从相机中选

-(void)selectCamera{

if ([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
{

UIImagePickerController
*image = [[UIImagePickerControlleralloc]init];

image.delegate=
self;

image.allowsEditing=
YES;

image.sourceType=
UIImagePickerControllerSourceTypeCamera;

[selfdismissViewControllerAnimated:YEScompletion:nil];

[selfpresentViewController:imageanimated:YEScompletion:^{}];

}else{

NSLog(@"请确定相机是否能正常打开");

}

}

//从相册中选择

-(void)selectPhotos{

if ([DkUIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
{

UIImagePickerControllerSourceType
sourceType =
UIImagePickerControllerSourceTypePhotoLibrary;

sourceType =
UIImagePickerControllerSourceTypeSavedPhotosAlbum;//保存的相片

DkUIImagePickerController
*picker = [[DkUIImagePickerControlleralloc]init];

picker.delegate=
self;

picker.allowsEditing=
YES;//是否允许编辑

picker.sourceType= sourceType;

[selfdismissViewControllerAnimated:YEScompletion:^{

}];

[selfpresentViewController:pickeranimated:YEScompletion:nil];

}else{

}

}

-(void) pickerView:(UIPickerView*)pickerView
didSelectRow:(NSInteger)row inComponent:(NSInteger)component{

NSLog(@"选择了照片");

}

-(void) imagePickerController:(UIImagePickerController*)picker
didFinishPickingMediaWithInfo:(NSDictionary*)info{

UIImage *img = info[UIImagePickerControllerEditedImage];

UIImage *newImage = [selfimageCompressForWidth:imgtargetWidth:ScreenWidth];

self.informationView.PersonIconimage=
newImage;

[self.informationViewrefresh];

[picker
dismissViewControllerAnimated:YEScompletion:nil];

self.informationView.PickBgView.hidden=
YES;

}

-(void) imagePickerControllerDidCancel:(UIImagePickerController*)picker{

[picker
dismissViewControllerAnimated:YEScompletion:^{

}];

NSLog(@"取消");

}

- (void)touchesEnded:(NSSet*)touches
withEvent:(UIEvent*)event {

[self.viewendEditing:YES];

}

//在视图将要出现的时候移除存储的状态

-(void)viewWillAppear:(BOOL)animated{

NSUserDefaults * def = [NSUserDefaultsstandardUserDefaults];

[def
removeObjectForKey:@"hengping"];

}

------------在自定义的相册控制器中:----------------

@interfaceDkUIImagePickerController()<UIImagePickerControllerDelegate>

@end

@implementationDkUIImagePickerController

///指定UIImagePickerController只支持横屏方向

- (NSUInteger)supportedInterfaceOrientations {

return
UIInterfaceOrientationMaskLandscape;

}

//设置状态栏的状态

-(UIStatusBarStyle) preferredStatusBarStyle{

return
UIStatusBarStyleLightContent;

}

-(BOOL) shouldAutorotate{

return
YES;

}

-(NSUInteger)application:(UIApplication*)application
supportedInterfaceOrientationsForWindow:(UIWindow*)window

{

NSString* strSubClass = [NSStringstringWithUTF8String:object_getClassName(window.rootViewController.presentedViewController)];

if ([@"ImgTakeViewController"isEqualToString:strSubClass])
{

return
UIInterfaceOrientationMaskAll;

}

return [applicationsupportedInterfaceOrientationsForWindow:window];

}

-(BOOL) prefersStatusBarHidden{

return
YES;

}

-----------------------------------在appDelegate中---------------------------------

//窗口支持的屏幕方向

-(UIInterfaceOrientationMask) application:(UIApplication*)application
supportedInterfaceOrientationsForWindow:(UIWindow*)window{

if ( ![selfloadInfoWithKey:@"hengping"]
) {

NSLog(@"横着的”);//如果不是横屏的时候返回横屏

return
UIInterfaceOrientationMaskLandscape;

}else{

NSLog(@"所有方向”);//否则返回所有方向

return
UIInterfaceOrientationMaskAll
;

}

}

//存储的方向的key

-(NSString*) loadInfoWithKey:(NSString*)
key {

NSUserDefaults * def = [NSUserDefaultsstandardUserDefaults];

return [def
objectForKey:key];

}

2.不同类型设备下的适配

/**

* 判断iPhone4

*/

#define IPHONE4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)

/**

*  判断iPhone5

*/

#define IPHONE5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

/**

*  判断iPhone6

*/

#define IPHONE6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

/**

*  判断iPhone6+

*/

#define IPHONE6PLUS ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

3.iOS中UIWebView字体大小、字体颜色、背景色

在webView的delegate回调方法-webViewDidFinishLoad:(UIWebView*)webView中设置

//用webView的代理方法设置webView的字体大小 颜色 页面背景色

- (void)webViewDidFinishLoad:(UIWebView*)webView{

//字体大小

[webView
stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(‘body‘)[0].style.webkitTextSizeAdjust= ‘70%‘"];

//字体颜色

[webView
stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(‘body‘)[0].style.webkitTextFillColor= ‘white‘"];

//页面背景色

[webView
stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(‘body‘)[0].style.background=‘#2E2E2E‘"];

}

self.myWebView.delegate = self;

self.myWebView.opaque = NO;//不设置这个值 页面背景始终是白色

self.myWebView.backgroundColor = [UIColor clearColor];

self.myWebView.scalesPageToFit = NO;  //禁止用户缩放页面

self.myWebView.dataDetectorTypes = UIDataDetectorTypePhoneNumber|UIDataDetectorTypeLink;

self.myWebView.scrollView.pagingEnabled = YES;

self.myWebView.scrollView.contentInset = UIEdgeInsetsMake(0, 0,0, 0);

self.myWebView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;

[self.view addSubview:self.myWebView];

4.OC中检测对象类型的方法

Objective-C中如何检验对象类型?

需要检测对象是否是NSString或UIImageView类型。我怎样才能完成?有没有“isoftype”函数类型?

如果对象是myObject,并且想要检测它是否是NSString, 那么代码应该是这样

[myObject isKindOfClass:[NSString class]]

如果想检测 myObject是不是UIImageView,用如下代码:

[myObject isKindOfClass:[UIImageView class]]

这是NSObject的一个功能

想要更多信息,检查NSObject文档

这样使用:

BOOL test = [self isKindOfClass:[SomeClass class]];

你也许还可以尝试这个:

for(id element in myArray)

{

NSLog(@"=======================================");

NSLog(@"Is of type: %@", [element className]);

NSLog(@"Is of type NSString?: %@", ([[element className] isMemberOfClass:[NSString class]])? @"Yes" : @"No");

NSLog(@"Is a kind of NSString: %@", ([[element classForCoder] isSubclassOfClass:[NSString class]])? @"Yes" : @"No");

}

5.UUID和UDID的区别

UUID(Universally Unique IDentifier)是基于iOS设备上面某个单个的应用程序,只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变。通过调用[[UIDevice
currentDevice] identifierForVendor];方法可以获取UUID。UUID不好的地方就是用户删除了你开发的程序以后,基本上你就不可能获取之前的数据了。

iOS中获取UUID的代码如下:

-(NSString*) uuid {

CFUUIDRef puuid = CFUUIDCreate( nil );

CFStringRef uuidString = CFUUIDCreateString( nil, puuid );

NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);

CFRelease(puuid);

CFRelease(uuidString);

return [result autorelease];

}

UDID(Unique Device Identifier)是一串由40位16进制数组成的字符串,用以标识唯一的设备,现在想通过代码获取是不可能的了,如果你想看看你设备的UDID,可以通过iTunes来查看。苹果从iOS5开始就移除了通过代码访问UDID的权限,所以想知道用户设备的UDID,是不行的

ios5 sdk中的获取方法:

[UIDevice currentDevice] uniqueIdentifier]

uniqueIdentifier在UIDevice.h中的定义如下:

@property(nonatomic,readonly,retain) NSString    *uniqueIdentifier  __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_NA,__MAC_NA,__IPHONE_2_0,__IPHONE_5_0);  // a string unique to each device based on various hardware info.

那么有没有另外的办法来获取用户设备的唯一标识符呢?答案是有的,当然这样的标识符不是苹果隐藏的UDID了,使用OpenUDID开源代码,这个代码通过一些特殊的算法,创建了每一个设备的唯一标识符,你可以拿过来用来识别设备了。

6.解决应用在横屏情况下调用相册崩溃的问题

我们的项目是只支持横屏,在调用相册的时候,程序直接
crash 了,这是让我没有想到的,错误原因是

Supported orientations has no common orientation with the application, and [PUUIAlbumListViewController shouldAutorotate] is returning YES

在网上查阅到的解决办法大都是该 UIImagePickerViewController
添加一个类别,重写它的设备方向的方法

在项目里有运用到 单例类,就想说我是不是能给单例类一个标识,用来标识是否在调用相册,最后的结果是这样的

实验的结果自然是成功的,切回当前程序的时候,旋转屏幕,并没有发生 UI 离开位置的情况,但使用过程中,还有一个地方不是很好,就是调用相册的时候,相册显示是以竖屏的状态呈现的,用户在使用的时候要先旋转屏幕到竖屏,切回程序的时候又要旋转回横屏,使用起来不是很舒服,最后想到的解决办法是给 UIImagePickerController 指定支持的方向为 横屏方向

总结了一下,每次调用一个 视图控制器 的时候,都会调用指定支持屏幕的方法 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window     同时在一个视图控制器显示的时候,会调用自己的 支持屏幕方向 supportedInterfaceOrientations
的方法,所以才能在 UIImagePickerController 显示的时候通过指定支持方向来改变 其在用户面前展现的方向。

7.屏幕旋转的一些方法

shouldAutorotateToInterfaceOrientation
不触发或者不执行的问题 及旋转过程中各方法的作用

要翻转的时候,首先响应的方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

return YES则支持翻转,NO则不支持

紧接着被调用。这个方法是发生在翻转开始之前。一般用来禁用某些控件或者停止某些正在进行的活动,比如停止视频播放。

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

这个方法发生在翻转的过程中,一般用来定制翻转后各个控件的位置、大小等。

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

可以用另外两个方法来代替:willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:   和  willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

最后调用的是:这个方法发生在整个翻转完成之后。一般用来重新启用某些控件或者继续翻转之前被暂停的活动,比如继续视频播放。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

8.PresentViewController切换界面

视图切换,没有NavigationController的情况下,一般会使用presentViewController来切换视图并携带切换时的动画,

其中切换方法如下:

– presentViewController:animated:completion: 弹出,出现一个新视图 可以带动画效果,完成后可以做相应的执行函数经常为nil

– dismissViewControllerAnimated:completion:退出一个新视图 可以带动画效果,完成后可以做相应的执行函数经常为nil

切换动画在压入一个新视图和弹出顶层视图均可以使用,下面只以压入视图为例。

presentModalViewController:animated:completion:使用系统自带四种动画

简单的实现方式:

[page2Controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];

[self presentModalViewController:myNextViewController animated:YES  completion:nil];

系统支持的四种动画:

typedef enum {

UIModalTransitionStyleCoverVertical=0, //默认方式,竖向上推

UIModalTransitionStyleFlipHorizontal, //水平反转

UIModalTransitionStyleCrossDissolve,//隐出隐现

UIModalTransitionStylePartialCurl,//部分翻页效果

} UIModalTransitionStyle;

presentModalViewController:animated:completion: 不用自带的四种动画效果

实现全翻页效果:

CATransition *animation = [CATransition animation];

animation.duration = 1.0;

animation.timingFunction = UIViewAnimationCurveEaseInOut;

animation.type = @"pageCurl";

//animation.type = kCATransitionPush;

animation.subtype = kCATransitionFromLeft;

[self.view.window.layer addAnimation:animation forKey:nil];

[self presentModalViewController:myNextViewController animated:NO completion:nil];

常見的轉換類型(type):

kCATransitionFade               //淡出

kCATransitionMoveIn          //覆盖原图

kCATransitionPush               //推出

kCATransitionReveal          //底部显出来

SubType:

kCATransitionFromRight

kCATransitionFromLeft    // 默认值

kCATransitionFromTop

kCATransitionFromBottom

设置其他动画类型的方法(type):

pageCurl   向上翻一页

pageUnCurl 向下翻一页

rippleEffect 滴水效果

suckEffect 收缩效果,如一块布被抽走

cube 立方体效果

oglFlip 上下翻转效果

9.如何在Label中显示图片

UIImage *image = [UIImage imageNamed:@"321.jpg"];

// 1> 生成文本附件

NSTextAttachment *textAttach = [[NSTextAttachment alloc] init];

textAttach.image = image;

// 2> 使用文本附件创建属性文本

NSAttributedString *strA = [NSAttributedString attributedStringWithAttachment:textAttach];

self.label.attributedText = strA;

所有人都知道label.Text 但应该不是全都知道label.attributedText

10. float小数四舍五入

  1. #import "ViewController.h"
  2. @interface ViewController ()
  3. @end
  4. @implementation ViewController
  5. - (void)viewDidLoad
  6. {
  7. [super viewDidLoad];
  8. NSLog(@"----%@---",[self decimalwithFormat:@"0.0000" floatV:0.334]);
  9. NSLog(@"----%@---",[self decimalwithFormat:@"0.0000" floatV:0.334569]);
  10. NSLog(@"----%@---",[self decimalwithFormat:@"0.0000" floatV:0.334519]);
  11. }
  12. - (void)didReceiveMemoryWarning
  13. {
  14. [super didReceiveMemoryWarning];
  15. // Dispose of any resources that can be recreated.
  16. }
  17. //格式话小数 四舍五入类型
  18. - (NSString *) decimalwithFormat:(NSString *)format  floatV:(float)floatV
  19. {
  20. NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
  21. [numberFormatter setPositiveFormat:format];
  22. return  [numberFormatter stringFromNumber:[NSNumber numberWithFloat:floatV]];
  23. }
  24. @end
  25. 最后控制台打印结果:

    [python]view
    plain
     copy

    1. 2014-03-19 15:44:45.262 TestNumberFormatter[3056:60b] ----0.3340---
    2. 2014-03-19 15:44:45.263 TestNumberFormatter[3056:60b] ----0.3346---
    3. 2014-03-19 15:44:45.263 TestNumberFormatter[3056:60b] ----0.3345---

时间: 2024-10-10 05:38:55

应用键横竖屏切换;label中显示图片;不同类型设备适配的代码;UIWebView字体大小、字体颜色、背景色的设置;的相关文章

小技巧,如何在Label中显示图片

这个需求其实是有的,比如QQ聊天界面里面发送的信息,可以用label来显示文字(也可以用button显示),但是有时候用户可能会发送图片.如果能让Label遇到文字就显示文字,遇到图片就显示图片就好了.可能有的人会说用Quartz2D,直接在Label的drawinrect 里面用上下文画上去.但这感觉太刻意去弄了,而且比较麻烦. 如果你不是在董铂然博客园看到本文,请点击查看原文 推荐一种用Label系统的属性来做. 1 2 3 4 5 6 7 8 9 10 UIImage *image = [

如何在Label中显示图片

UIImage *image = [UIImage imageNamed:@"321.jpg"]; // 1> 生成文本附件 NSTextAttachment *textAttach = [[NSTextAttachment alloc] init]; textAttach.image = image; // 2> 使用文本附件创建属性文本 NSAttributedString *strA = [NSAttributedString attributedStringWith

android 横竖屏切换

解决Android手机 屏幕横竖屏切换 Android中当屏幕横竖屏切换时,Activity的生命周期是重新加载(说明当前的Activity给销毁了,但又重新执行加载),怎么使屏幕横竖屏切换时,当前的Activity不销毁呢? 1. 在AndroidManifest.xml中为Activity设置configChanges属性, application android:icon="@drawable/icon" android:label="@string/app_name&

Qt:添加点击事件的Label并显示图片

1.给label添加点击事件 Qt中原本的label是没有点击事件的,如果想添加点击事件的话,可以继承QLabel类并重载鼠标事件(比如mousePressedEvent),然后在鼠标事件中发送一个信号,具体如下: // clicklabel.h #ifndef CLICKEDLABEL_H #define CLICKEDLABEL_H #include <QWidget> #include <QLabel> class ClickedLabel : public QLabel {

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

iOS 横竖屏切换(应对特殊需求)

iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UIInterfaceOrientationLandscapeRight与UIInterfaceOrientationMaskLandscapeRight都代表横屏,Home键在右侧的情况:UIDeviceOrientationLandscapeLeft则是Home键在左侧. 一般情形 所有界面都支持横

横竖屏切换时候Activity的生命周期变化

横竖屏切换时候Activity的生命周期变化 对于横竖屏幕的切换,Activity的不同生命周期的变化,自己亲自用真机调试测试了一下,总结如下: Activity类: package com.example.screenorientationchange; import android.support.v7.app.ActionBarActivity; import android.content.res.Configuration; import android.os.Bundle; publ

Activity嵌套多个Fragment实现横竖屏切换

一.上图 二.需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.其中竖屏FP1与FP2可以切换为横屏的FL1,FL2,即竖屏FP1切换到对应的横屏FL1,竖屏FP2对应切换到横屏FL2. 3.FP3不允许横竖屏切换. 4.竖屏FP1,FP2,FP3用ViewPager实现左右滑动切换. 5.横屏的FL1,FL2用布局中的切换按扭实现左右切换,不允许滑动切换. 看到这需求有点儿晕菜了吧!!!呵呵

Android实战技巧之二十四:横竖屏切换

这几年一直在做手机上和电视盒的App,几乎没有考虑过横竖屏切换的问题.电视盒好说,横屏不变,你要是给它设计个竖屏人家也没机会使:而手机上的应用就不好说了,有些界面你设计了横竖屏兼容可能是为了表示你的功能强大.但是按照惯例,或许也是设计师图省事,我们只是做一个方案.就像目前主流的App都只有竖屏一个模式,比如微信.京东和招商银行.我截了几张图表示一下. 但是像地图之类的应用,也许横屏会显示的更友好一些.请看腾讯地图的设计如下: 细心的你会发现,地图的横竖屏的样式几乎是一样的布局,调整起来还是比较容