xcode打不开界面中把画布上的设计界面删除了,还能补救吗

总结Xcode中的一些使用技巧
下面总结一些Xcode中的小技巧:
1.双击画布,可以实现在100%和150%视图间切换
默认情况下,缩放画布cavas,是通过点击放大/缩写/原始大小的按钮:
2.Alt+鼠标移动至对象上 -& 可显示相关尺寸
3.(批量)注释或取消注释代码(块)的快捷键 -& Command+/
选择代码,Command+/,实现添加批量注释和取消批量注释。
4.iOS模拟器中实现(地图等)放大和缩小:Alt+鼠标
参考知道了,原来Alt+鼠标,然后就可以实现模拟多点触摸,实现放大而后缩小了:
而Alt+Shift+鼠标的话,则是对应的两个触点相对距离不变:
共享此文章:
免费的格式化Javascript源码的网站
查询Unicode字符,且还带Oct,Decimal,Hex,HTML Entity
HTML和Javascript都支持,很好用。UIStack View如何让你的开发更简单(iOS 9和Xcode 7)
招聘信息:
本文由CocoaChina译者翻译自appcoda.原文:之前我们阐述了。本篇文章的开始我们将涵盖一些iOS9的很酷的新特性。iOS即将到来的新版本会带来很多新的特性。对于开发者来说堆栈视图(UIStackView)的引入值得一提。我知道对于一些开发者来说使用autolayout设计一些复杂的交互界面是比较困难的。UIStackView正好能帮助到并让我们的开发者的工作变得更容易些。UIStackView提供了一个高效的接口用于平铺一行或一列的视图组合。对于嵌入到StackView的视图,你不用再添加自动布局的约束了。Stack View管理这些子视图的布局,并帮你自动布局约束。也就是说,这些子视图能够适应不同的屏幕尺寸。此外,你可以嵌入一个stack View到另一个stack view中来创建更为复杂的用户界面。不要误解我的意思,这并不意味着你就不需要处理自动布局了。你仍旧要定义一些布局约束来约束stack view。它只是帮你节约了为每个UI元素创建约束的时间,同时它更容易的从布局中添加/删除一个视图。Xcode7提供两种方式使用UIStackView。你可以从对象库中拖一个Stack View(水平的/竖直的)放到storyboard的正确位置上。然后你可以拖一些label,button,imageView等视图放到stack view中。另外,你可以在自动布局栏中使用Stack选项。对于这个方式,你可以简单的选择两个或更多的视图,之后点击Stack选项,IB将会把这些视图嵌入到一个stackview中,并自动的调整。如果你仍旧对如何使用stack view没有太多头绪,没关系,接下来我们将在这篇文章中介绍这两种方式。继续往下阅读,你就会很快明白我的意思的。我假设你对auto layout了解。如果不是,请先阅读这片关于autolayout的[]Demo App先瞧一眼我们将要构建的demo app。在这篇文章中我将会给你展示如何使用stackview布局一个类似的用户界面:你可以不使用stack view创建一样的UI,但是,但正如你所看到的,stack view完全改变了布局用户界面的方式。本文并没用coding,我们只是集中在使用IB来布局这个用户界面。开始前,请下载这个[](备用[])。你需要使用Xcode7 beta4(或以上版本)来build这个工程。如果你没有安装,你要下载个。该项目模板非常简单,它仅仅预置了导航控制器和一些示例图片。&&感谢:实例的照片是由[]提供。从对象库中添加Stack Views&现在升级Xcode7并打开Main.storyboard。从对象库中拖出垂直的stack view放到storyboard上的view controller中。Stack View可以在纵向和横向布局安排其子视图(称为安排视图)。因为我们要布局垂直的图像视图,所以我们选择垂直的Stack View。接下来,从对象库中拖出一个图像视图,当你把图像视图放到stack view中,图像视图会自动调整。重复同样的操作,添加更多的image view。这就是它神奇的地方:当您添加另一个图像视图时,stack view会自动布局图像视图,为您设置必要的约束。酷,对吗?为Stack View定义布局约束Stack View节省了开发者为每个UI元素定义约束的时间,所说的,您需要提供Stack View的布局约束。对于我们刚刚添加的,我们需要定义以下布局约束:设置Stack View的距上,距左和居右的间距,使得Stack View在屏幕的顶部。为Stack View设置一个高度约束,使得Stack View视图的高度占父视图高度的70%。现在选择stack view,点击布局栏按钮中的Pin按钮,设置距上,距左,居右值分别为10,0,0。然后点击“Add 3 Constraints”按钮添加这些约束。Stack view的当前位置不符合约束,你可以在Document Outline点击警告指示(即黄色的箭头)纠正位置。要设置高度约束,就要在IB的Document Outline中从堆栈视图到视图中的控件拖动视图,释放按钮后,选择“Equal Heights”。这是设置stack view的高度和这个view的高度相等的。然而,stack view仅仅需要高度的75%。所以,选择“Stack View.height”的约束,选择Attributes inspector,把Multiplier这项的值从1.0改为0.7.设置Stack View的属性这个stack view 看起来并不是我们期望的。一旦你添加了stack view,你可以改变一些stack view的属性来改变它的外观。axis选项决定是否应布置的视图垂直或水平布置。 alignment选项控制这些视图的对齐方式。比如你如果设置成Leading,stack view管理的视图排列按Leading对齐。distribution属性决定了其管理的视图的大小和位置。默认设置为Fill。这是stack view尽量让它的所有子视图在一个合理的距离。现在把它改为Fill Equally。stack view会调整它所有的子视图一样的尺寸。spacing属性让你设置视图之间的间距。把它值改为10来增加图像视图之间的间距。设置图像接下来,我们设置image view的相应的图像。选择第一个image view,选择Attributes inspector,把image设置为“nature-1″,把model设置为“Aspect Fill”,同时勾选上“Clip Subviews”。重复同样的步骤设置余下的image view,但是要把image 设置为“nature-2″ 和 “nature-3″。这样你的布局看起来像这样:现在你可以运行项目,预览下。可以在模拟器上测试app的UI是否正确的适配所有的设备。stack view已经自动的为你添加好了约束。事实上你可以启动view debugging选项(要在运行app的时候)来显示图像视图的布局约束。使用嵌套Stack View布局标签和按钮我们还没有完成。有几个标签和按钮添加到用户界面。现在将标签从对象库中拖到视图,命名“Nature”,并将其定位在stack view下面。把它的字体大小改为30点,使其更大一些。下一步,将另一个标签视图和名称标签”A collection of nature photos from magdeleine.co“。放置在Nature标签之下。再次,您不需要设置这些标签的布局约束。让stack view为你做这个魔术。在本教程的最开始,我提到了使用stack view的方法。之前,是从对象库中添加了堆栈视图。现在我会告诉你另一个办法。按住命令键来选择标签,然后单击布局栏中的Stack按钮。IB自动把这些标签嵌入到垂直堆叠视图中。下一步,向视图添加2个按钮。命名一个按钮,“Like”,另一个是“Share”。再次,我们不想处理自动布局。所以,在布局栏中选择按钮,然后单击Stack按钮,将两个按钮嵌入到一个水平堆栈视图中。设置堆栈视图的spacing值为5。如果你看了最后的布局,这两个按钮应该放在Nature标签旁边。你怎么能做到这一步呢?关于stack view的最重要的是,您可以使用嵌套的多个stack view来构建你想要的精确布局。现在将stack view拖到Nature标签的按钮上。一旦你释放了按钮,stack view将被嵌入到另一个stack view中。布局Nature标签和按钮,选择两种视图,然后将它们添加到另一个stack view中,使用stack选项。默认情况下,新堆栈视图的轴设置为垂直方向。在属性检查中,把它改为水平,这样就可以把Like和Shared按钮放置在Nature标签旁边了。按钮也需要与Nature标签的基线对齐。选择stack视图,并将alignment从Fill改为First Baseline。同时,spacing选项设置为20,这样来添加Naturel标签和按钮之间的间距。正如你所看到的,我们只需要使用嵌套的stack view构建你需要的精确布局。最后,我们为包含图像的stack view和包含按钮&标签的stack view之间的设置布局约束。选择包含按钮和标签的堆栈视图,然后单击布局栏按钮中的Pin按钮。设置居上、距左和居右的值分别为0、8和0。确保描述标签是自动调整大小,Lines设置为0和Line Breaks设置为Word Wrap。太好了你已经完成了界面设计。现在运行该项目来看看结果。如果您的一切配置正确,您的UI应该看起来像这样:如果你把iPhone横过来,UI应该是这样:它看起来不错,但如果这些图像想这样横向排列的话,是不是更给力?使用Size Classes 调整Stack Views为了达到iPhone在不同的方向上布局不一样,我们必须使stack view自适应。在iOS 8中,介绍了Size Classes的概念。下表显示了iOS设备及其相应的Size Classes:你可以使用size classes提供的重写原来的基本布局。在这种情况下,我们在这两种size classes情况下要设置stack view的axis(持有图像视图的)从垂直到水平:Compact width-Compact heightRegular width-Compact height现在选择stack view,在选择Attributes inspector。在Axis选项下点击+按钮。选择Any Width > Compact height,之后设置这个size classes下的Axis值为Horizontal。这里,any width包括compact和regular两种宽度。做完这些,stack view将会在iPhone横屏的时候设置为水平。在不同的iOS设备上运行项目,查看结果。总结在本教程中,我给你介绍了stack view并演示如何使用这个新组件布局你的UI。stack view让你使用很少的约束高效的完成UI的布局。你可能有一个问题是,何时使用stack view?苹果公司的工程师建议开发者先采用stack view,然后才是需要实际使用的繁琐的约束。因此,开始设计你的用户界面使用stack view!我相信你会喜欢它。供参考,你可以在这里下载[]。
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
点击量9831点击量7140点击量6799点击量6566点击量6527点击量6006点击量5449点击量4972点击量4052
&2015 Chukong Technologies,Inc.
京公网安备8963085人阅读
IPhone开发(80)
2014年,苹果又出了两种尺寸,这里标注下,以后再有新尺寸,再继续更新。
Table 39-1Size (in pixels) of custom icons and images
iPhone 6 Plus (@3x)
iPhone 6 and iPhone 5 (@2x)
iPhone 4s (@2x)
iPad and iPad mini (@2x)
iPad 2 and iPad mini (@1x)
App icon (required&for all apps)
App icon for the App Store (required&for all apps)
1024 x 1024
1024 x 1024
1024 x 1024
1024 x 1024
1024 x 1024
Launch file or image (required&for all apps)
Use a launch file (see)
For iPhone 6, use a launch file (see&)
For iPhone 5, 640 x 1136
1536 x 2048 (portrait)
2048 x 1536 (landscape)
768 x 1024 (portrait)
1024 x 768 (landscape)
Spotlight search results icon (recommended)
Settings icon (recommended)
Toolbar and navigation bar icon (optional)
About 66 x 66
About 44 x 44
About 44 x 44
About 44 x 44
About 22 x 22
Tab bar icon (optional)
About 75 x 75 (maximum: 144 x 96)
About 50 x 50 (maximum: 96 x 64)
About 50 x 50 (maximum: 96 x 64)
About 50 x 50 (maximum: 96 x 64)
About 25 x 25 (maximum: 48 x 32)
Default Newsstand cover icon for the App Store (required&for Newsstand apps)
At least 1024 pixels on the longest edge
At least 1024 pixels on the longest edge
At least 1024 pixels on the longest edge
At least 1024 pixels on the longest edge
At least 512 pixels on the longest edge
Web clip icon (recommended for web apps and websites)
iphone6/6+ 更新:
Icon-Small@3x.png & & 87*87
Icon-40@3x.png & & & & & 120*120
Icon-60@3x.png & & & & & 180*180
Icon.png & & & & & & & & & & & &57*57
Icon@2x.png & & & & & & & &114*114
Icon-Small.png & & & & & & & &29*29
Icon-Small@2x.png & & & & & &58*58
Icon-Small-50.png & & & & & &50*50
Icon-Small-50@2x.png & & & &100*100
Icon-72.png & & & & & & & & & &72*72
Icon-72@2x.png & & & & & & & &144*144
Icon-40.png & & & & & & & & & &40*40
Icon-40@2x.png & & & & & & & &80*80
Icon-60.png & & & & & & & & & &60*60
Icon-60@2x.png & & & & & & & &120*120
Icon-76.png & & & & & & & & & &76*76
Icon-76@2x.png & & & & & & & &152*152
&LaunchImage
For iPhone 6
750 x 1334 (@2x) for portrait
1334 x 750 (@2x) for landscape
For iPhone 6 Plus:
1242 x 2208 (@3x) for portrait
2208 x 1242 (@3x) for landscape
---------------------------------------------------------------------
4.0 inch screen:
Default-568h@2x.png (old 640x1136 ~ for iPhone 5)
4.0 inch screen:&
LaunchImage-700-568h@2x.png (new 640x1136 ~ for iPhone 5)
4.7 inch screen:&
LaunchImage-800-667h@2x.png (750x1334 ~ for iPhone 6)
5.5 inch screen:&
LaunchImage-800-Portrait-736h@3x.png ( ~ for iPhone 6 Plus Portrait)
5.5 inch screen:&
LaunchImage-800-Landscape-736h@3x.png ( ~ for iPhone 6 Plus Landscape)
Retina iPad:
Default-Portrait@2x~ipad.png ( ~ for Retina &iPad Portrait)
Retina iPad:
Default-Landscape@2x~ipad.png ( ~ for Retina &iPad Landscape)
iPad Mini/iPad:
Default-Portrait~ipad.png (768x1024 ~ for &iPad Portrait)
iPad Mini/iPad:
Default-Landscape~ipad.png ( ~ for &iPad Landscape)
适配iphone6/6+启动界面
如果旧的工程直接跑到这两个模拟器中时,默认是&兼容模式&,即系统会简单的把内容等比例放大,显示效果有些模糊但尚可接受。此时App内部获取到的设备分辨率和iPhone5是一样的:320*568 point。
启用高分辨率模式有2个方法:
1.添加大屏的LaunchImage:
在Images.xcassets里,删除旧的LaunchImage组,然后新建LaunchImage组,添加对应高分辨率的图片。(参考:)
2.添加Launch Screen File
Launch Screen是Xcode6和iOS8新加的功能,它用一个xib文件来作为启动画面。App在旧版iOS(低于ios8)启动时,该属性会被自动忽略,不会造成异常。
首先,点击New File -&iOS User Interface -&Launch Screen,然后在工程设置项里启用它:
LaunchFile
&不过这个xib不能关联任何的代码(不能自定义View的Class,不能IBOutlet,不能加Object),可以理解成这个xib就是一张截图,这个方案的好处在于可以使用到Size Classes来针对不同屏幕布局这个xib。
上面两处设置,只要启用任意一个即可让App进入高分辨率模式;但如果两处都没有设置,则App会回退到兼容模式。
两处都设定的话在ios8会走Launch Screen File,在低于ios8 走LaunchImage
PS:iPhone4、iPhone5、iPhone6这几个设备的ppi都是相同的,默认图片优先是@2x。iPhone6 Plus的像素密度更高,默认图片优先是@3x。 另外,iPhone6 Plus有一点和其他设备不同:在App内部获得的屏幕分辨率是,但设备实际分辨率是,这时系统会把整体的显示内容做一个缩放,downscale到1/1.15。
&UIPageControl的autoresizingMask
在设置UIPageControl实例的宽度时,显示的好像总是设置的四倍左右,但是把其他组建(UILable等)设置在同一父容器中显示的是正常的。头文件看到UIPageControl的autoresizingMask默认值是UIViewAutoresizingNone,但是感觉没起作用,于是这是下
Java代码&&
_mainPageControl.autoresizingMask&=&UIViewAutoresizingN&&
&UIPageControl显示正确了。(apple的bug?)
UIActivityViewController crashing on iPads by sdk8
其老早在&/library/ios/documentation/UIKit/Reference/UIActivityViewController_Class/ 中就说了:On iPad, you must present the view controller in a popover. On iPhone and iPod touch, you must present it modally。
在sdk8之前你ipad还是用了presentViewController,那在dismissViewControllerAnimated的时候屏幕会旋转下,可能你还能接受,但是在sdk8便会直接crash,报错:
Java代码&&
2014-10-15&14:03:25.927&BT2014[5133:488272]&***&Terminating&app&due&to&uncaught&exception&'NSGenericException',&reason:&'UIPopoverPresentationController&(&_UIAlertControllerActionSheetRegularPresentationController:&0x&)&should&have&a&non-nil&sourceView&or&barButtonItem&set&before&the&presentation&occurs.'&&
***&First&throw&call&stack:&&
(0x187d9e084&0x&0x18cc56bf0&0x18c81e3f8&0x18c81cf30&0x18c5a2efc&0x18c5149c0&0x187d56388&0x187d53314&0x187d536f4&0x187c81664&0x190d7f5a4&0x18c5864f8&0xc&0x198cfea08)&&
libc++abi.dylib:&terminating&with&uncaught&exception&of&type&NSException&&
&所以用sdk8编译时ipad用pop,并且用新类:UIPopoverPresentationController
UIActivityViewController
Java代码&&
Accessing&the&Completion&Handler&&
completionHandler&&
&(iOS&8.0)&&
The&completion&handler&to&execute&after&the&activity&view&controller&is&dismissed.&&
Declaration&&
OBJECTIVE-C&&
@property(nonatomic,&copy)&UIActivityViewControllerCompletionHandler&completionHandler&&
Discussion&&
When&the&user-selected&service&finishes&operating&on&the&data,&or&when&the&user&dismisses&the&view&controller,&the&view&controller&executes&this&completion&handler&to&let&your&app&know&the&final&result&of&the&operation.&&
Import&Statement&&
Availability&&
Available&in&iOS&6.0&and&later.&&
Deprecated&in&iOS&8.0.&&
&LaunchServices: invalidationHandler called& with UIActivityViewController iOS8
In iOS8 when I present or dismiss a UIActivityViewController, my app logs: &LaunchServices: invalidationHandler called&。
参考:/library/ios/documentation/UIKit/Reference/UIPopoverPresentationController_class/index.html
/message/9415
/questions//sharing-via-uiactivityviewcontroller-to-twitter-facebook-etc-causing-crash
可能是苹果的issue
ios sdk8/ios8 remoteNotification&
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
在苹果UIApplication文件中说明:
@interface UIApplication (UIRemoteNotifications)
- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)types NS_DEPRECATED_IOS(3_0, 8_0,&&Please use registerForRemoteNotifications and registerUserNotificationSettings: instead&);
// Returns the enabled types, also taking into account any doesn't relate to connectivity.
- (UIRemoteNotificationType)enabledRemoteNotificationTypes NS_DEPRECATED_IOS(3_0, 8_0,&&Please use -[UIApplication isRegisteredForRemoteNotifications], or -[UIApplication currentUserNotificationSettings] to retrieve user-enabled remote notification
and user notification settings&);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
所以在ios8中应该用的新的注册通知的代码:
&if&([[[UIDevice&currentDevice]&systemVersion]&floatValue]&&=&8.0)&&
&&&&&[[UIApplication&sharedApplication]&registerUserNotificationSettings:[UIUserNotificationSettings&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&settingsForTypes:(UIUserNotificationTypeSound&|&UIUserNotificationTypeAlert&|&UIUserNotificationTypeBadge)&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&categories:nil]];&&
&&&&&[[UIApplication&sharedApplication]&registerForRemoteNotifications];&&
&&&&&[[UIApplication&sharedApplication]&registerForRemoteNotificationTypes:&&
&&&&&&(UIUserNotificationTypeBadge&|&UIUserNotificationTypeSound&|&UIUserNotificationTypeAlert)];&&
&原本在IOS7当中 判断push是否打开的方法是:
Java代码&&
UIRemoteNotificationType&types&=&[[UIApplication&sharedApplication]&enabledRemoteNotificationTypes];&&
return&(types&&&UIRemoteNotificationTypeAlert);&&
如果将这段代码使用在 IOS8当中,虽然不会出现crash的现象,但永远返回空。 在IOS8中,我们使用如下的新代码来取代以上的代码:
Java代码&&
+(BOOL)enabledRemoteNotification{&&
&&&&UIRemoteNotificationType&&&
&&&&if&([[[UIDevice&currentDevice]&systemVersion]&floatValue]&&=&8.0)&&
&&&&&&&&types&=&[[UIApplication&sharedApplication]&currentUserNotificationSettings].&&
&&&&else&&
&&&&&&&&types&=&[[UIApplication&sharedApplication]&enabledRemoteNotificationTypes];&&
&&&&return&(types&&&UIRemoteNotificationTypeAlert);&&
ios 8 - buttons in horizontal scroll view intercepting pan event - scroll does not work
&含有uibutton的ScrollView在iOS8中无法滚动的解决办法:
Java代码&&
theScrollView.panGestureRecognizer.delaysTouchesBegan&=&theScrollView.delaysContentTouches&&
&转载:/blog/2123545
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:390813次
积分:3184
积分:3184
排名:第8172名
原创:69篇
转载:23篇
评论:62条
(1)(1)(1)(1)(2)(3)(4)(3)(3)(7)(5)(8)(2)(2)(2)(2)(1)(2)(1)(1)(1)(2)(1)(3)(3)(1)(1)(1)(1)(1)(4)(7)(2)(1)(1)(1)(1)(1)(1)(1)(2)(3)}

我要回帖

更多关于 xcode界面介绍 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信