首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【IOS开发基础系列】Storyboard专题

当这个键缺失时,UIApplication将默认加载MainStoryboard.storyboard 文件并自动将故事板中第一个viewcontroller 初始化并放到一个新创建的UIWindow...以这种方式,你可以创建超过 5 个的ViewController 给TabBarController,它将自动在Tabbar 上显示 More... 按钮。...创建新连接时,新的 Tab 也同时被加到TabBarController上,名字叫做 “Item”。我想将新的场景放在第一个Tab上,可以用拖拽 Tab 的方式改变它们的顺序。         ...但我想在单元格右边加一张图片以显示玩家级别(以星级的形式)。UITableViewCell的标准样式中不包含可以在单元格中放入一个ImageView,因此我只能选择定制设计。         ...拖一个 ImageView 到cell 右端,紧靠着右箭头。调整它宽度为81,高度无所谓。

1.3K30

代码实验室--带你一步步理解使用 ConstraintLayout

你将学到什么 新布局管理器使用的约束系统 创建约束以构建灵活且高效的布局 新布局编辑器中的各种特性 你所需的准备 Android Studio 2.2 preview 或者更新的版本 样例代码 获取样例代码...添加 TextView 到布局中 现在让我们从控件板上拖一个 TextView 到布局上....在下一节, 我们会学习如何创建 View 之间的约束. 创建手工约束 要创建一个约束, 你需要在指定手柄上点击并按住鼠标, 然后拖到另一个控件的约束手柄....为了实现, 我们可以如下所示创建一个 TextView 上锚点和 ImageView 底锚点之间的约束. 删除约束 使用这个 显示在布局中的删除约束按钮以删除选中控件上的 所有 约束....从控件板上拖一个 TextView 和一个 Plain Text 到布局上. 调整 TextView 和 Plain Text 相距 48dp.

2.7K60
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Power Pivot入门前奏:数据透视——各种分析角度,想咋看就咋看

    大海:你刚试了将某个分析角度(比如“区域”)放到了【行】上,结果就出现了一行行的统计结果,那么你试试将另一个角度(比如“区域”)放到【列】上看看? 小勤:好的。...将“区域”拖放到【行】,将“品类”拖放到【列】,将毛利拖放到【值】。 大海:怎样?是你想要的吗? 小勤:嗯,正是这样,这就可以做各种各样的交叉对比分析了。 大海:嗯。你还可以试着做一下其他的。...比如你的“品类”下不是还有“细类”吗?你把“细类”再放到【列】里看看? 小勤:好的。哇塞,分类还能嵌套啊!原来要用sumifs函数做这个多累啊,而且这个一拖一放,结果瞬间就出来了。 大海:对的。...但一般来说数据透视表的设计不建议做成这种横向很宽的,因为看起来不是很好看,所以你可将“区域”放到【列】,将“品类”和“细类”放到【行】。...大海:现在你还担心刁总的多维度分析问题吗? 小勤:嗯,这回真是不用担心了,领导要啥我就调整一下【行】、【列】、【值】的内容就可以了,真方便。

    78720

    推荐:多线程的实现方式及经典示例

    任务和队列 任务:在同步函数和异步函数中执行 队列:用来存放任务(并发 串行) GCD会自动将队列中的任务取出,放到对应的线程,任务的取出遵循FIFO,即先入先出队列,First Input First...dispatch_apply 快速迭代 示例小程序:将一个文件夹中的图片剪切到另一个文件夹 // 将图片剪切到另一个文件夹里 NSString *from = @"/Users/Ammar/Pictures...,而是在当前线程同步执行操作,只有将 NSOperation 放到一个 NSOperationQueue 中,才会异步执行操作 NSBlockOperation NSBlockOperation *op...mian方法中 NSOperationQueue 使用NSOperationQueue创建队列:主队列和全局队列 // 创建一个其他队列(包括串行队列和并发队列) 放到这个队列中的NSOperation...对象会自动放到子线程中执行 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 创建一个主队列,放到这个队列中的NSOperation

    1.2K160

    Android ConstraintLayout详解「建议收藏」

    收获 新Layout Manager所使用的Constraints系统 创建Constraints来构建弹性高效的Layouts 新Layout编辑器的各种功能 需求 Android Studio 2.2...二)手动创建Constraints 创建一个约束,你需要在widget的某个控键上点击并按住,然后拖到两一个widget的约束控键内。一旦显示绿色,你就可以松手了最终约束就会被创建。...我们可以在TextView的顶部控键与ImageView的底部控键创建一个约束,如图: 移除约束:移除某个约束只需点击指定约束的控键;移除全部约束需要点击如下按钮: 下一步,创建ImageView...跟容器顶部的约束 最后,创建ImageView左右两侧的约束 89f057b3a8ea3e0b.png 创建基线约束 – 连接widget的基线控键到另一个的基线 三)熟悉Inspector...使用Inspector面板来修改最右边button的text为@string/upload以及左侧改为@string/discard 将一个TextView和一个Plain Text放到layout中。

    2.4K30

    为播放器外接一套渲染框架

    记得之前公司曾经有个需求,要在播放的视频中加上水印,这个问题有两种处理方案: 方案一:SurfaceView或者TextureView上加一个ImageView 方案二:视频渲染使用OpenGL渲染,...渲染纹理的时候将水印加上 方案一是一个很取巧的方案,我加一个ImageView来显示水印,ImageView和SurfaceView是两个分层的View,这样的处理有两个不太方便的地方: SurfaceView...以ijkplayer播放器为例,我们需要提供一个Surface给IjkMediaPlayer实例,至于这个Surface是SurfaceView---> onSurfaceCreate回调的,还是你自己创建的...这里出现了两个Surface,一个Surface来自SurfaceView创建的,实际上是画布,另一个Surface是我们在EGL环境中通过OES纹理创建的,最终设置给播放器,然后我们通过监听播放器对这个...本文谈到的视频调色,其实可以稍微拓展一点,上面说的都是手动调色,你知道智能调色吗?后面我们继续展开。

    54810

    iOS-UI控件之UIImageView

    contentMode属性 带有scale单词的:图片有可能会拉伸 UIViewContentModeScaleToFill 将图片拉伸至填充整个imageView 图片显示的尺寸跟imageView...= imageView.image.size; imageView.frame = tempFrame; initWithImage:方法 利用这个方法创建出来的imageView的尺寸和传入的图片尺寸一样...将相同代码放到一个新的方法中 不用的东西就变成方法的参数 图片的加载方式 有缓存 UIImage *image = [UIImage imageNamed:@"图片名"]; 使用场合:图片比较小...、使用频率较高 建议把需要缓存的图片直接放到Images.xcassets 无缓存 NSString *file = [[NSBundle mainBundle] pathForResource:@"图片名...:方法,并且传递@"123"参数 音频文件的简单播放 // 创建一个音频文件的URL(URL就是文件路径对象) NSURL *url = [[NSBundle mainBundle] URLForResource

    90180

    超全的Android组件及UI框架

    设计和代码切换,一般情况下,我们 UI 布局都是先拖再细调整,也就是先用设计默认拖出一个大概的布局,然后用代码来微调 一、常见的布局 1. ...:gravity表示button上的字在button上的位置。...我们可以将 Button 的 android:background 属性设置为该 drawable 资源即可轻松实现按下 按钮时不同的按钮颜色或背景 下表列出了可以设置的属性 在 res/drawable...RadioGroup 单选按钮组 6.1 常用属性 要实现 RadioButton 的 单选功能,需要把所有的 RadioButton 放到 RadioGroup 里面  用于将几个 RadioButton...,但是,记住,它们之间没有任何关系,一个的选中并不会影响另一个选中或者不选中 CheckBox 除了从 Button 继承而来的属性外,没有自己的属性,但从 CompoundButton 继承了一个属性

    6.2K30

    android加载大图,防止oom

    压缩后的图片大小应该和用来展示它的控件大小相近,在一个很小的ImageView上显示一张超大的图片不会带来任何视觉上的好处,但却会占用我们相当多宝贵的内存,而且在性能上还可能会带来负面影响。...为此每一种解析方法都提供了一个可选的BitmapFactory.Options参数,将这个参数的inJustDecodeBounds属性设置为true就可以让解析方法禁止为bitmap分配内存,返回值也不再是一个...100*100的缩略图,并在ImageView上展示。...为了能够选择一个合适的缓存大小给LruCache, 有以下多个因素应该放入考虑范围内,例如: 你的设备可以为每个应用程序分配多大的内存? 设备屏幕上一次最多能显示多少张图片?...        task.execute(resId);       }   }   BitmapWorkerTask 还要把新加载的图片的键值对放到缓存中。

    1.3K90

    iOS复习中有关SDWebImage可能知识点总结(1)

    如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小 会先清空内存缓存).SDImageCacheDelegate 回调imageCache:didFinishImage:forKey...图片解码处理在一个NSOperationQueue完成,不会拖慢主线程UI.如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多. 14....将图片保存到SDImageCache中内存缓存和硬盘缓存同时保存,写文件到硬盘也在以单独NSInvocationOperation完成,避免拖慢主线程 18....③以上两种情况只有在网速极慢和手机处理速度极慢的情况下才会发生,实际上发生的概率非常小,大多数是这种情况:操作已经进行到下载完成了,这次使用的cell是一个重用的cell,而且保留着imageView...通过NSOperationQueue的setSuspend吗?

    92020

    Android高效加载大图、多图解决方案,有效避免程序OOM

    压缩后的图片大小应该和用来展示它的控件大小相近,在一个很小的ImageView上显示一张超大的图片不会带来任何视觉上的好处,但却会占用我们相当多宝贵的内存,而且在性能上还可能会带来负面影响。...为此每一种解析方法都提供了一个可选的BitmapFactory.Options参数,将这个参数的inJustDecodeBounds属性设置为true就可以让解析方法禁止为bitmap分配内存,返回值也不再是一个...100*100的缩略图,并在ImageView上展示。...为了能够选择一个合适的缓存大小给LruCache, 有以下多个因素应该放入考虑范围内,例如: 你的设备可以为每个应用程序分配多大的内存? 设备屏幕上一次最多能显示多少张图片?...还要把新加载的图片的键值对放到缓存中。

    2.4K70

    Glide缓存探密Glide的缓存策略

    但Glide在缓存策略上,花费了很多心思,从而使得其在加载图片过程中,对内存的使用量非常小。 本文将分享Glide在缓存策略上使用的技巧。...我们需要根据图片的尺寸,创建一个相应尺寸的Bitmap,这个Bitmap会存入内存缓存,然后通过setImageBitmap(Bitmap bitmap)显示出来。...这个Bitmap在图片显示时,是一个不可避免的内存消耗。 在加载图片之后,内存缓存填满,我们可以将Bitmap从内存缓存中移出。...下次我们再显示相同的图片,又需要创建新的Bitmap2,之前在Java堆中的Bitmap是否还在显示,是否已被回收也是未知。...我们新建一个没有界面的Fragment,称之ListenerFragment。将ListenerFragment作为ChildFragment加入被监听的Fragment中。

    1.3K21

    安卓 ImageView 的 scaleType 用法实用总结

    以FIT_开头的4种,共同点是都会对图片进行缩放(只有fitXY不等比缩放); 以CENTER_开头的3种,共同点是居中显示,图片的中心点与ImageView的中心点重叠; MATRIX; 下面一个个讲解...图片(不等比)缩放到控件大小,完全填充控件大小显示 CENTER_ center 不使用缩放,显示图片的中心部分,即图片的中心点和ImageView的中心点重叠。...MATRIX 需要与ImageView.setImageMatrix(Matrix matrix) 配合使用,指定一个变换矩阵用于指定图片如何展示。...//创建一个单位矩阵 matrix.setTranslate(50, 50); //平移x和y各50单位 matrix.preRotate(40);...就个人使用来说,觉得最常用的就是fitCenter(默认值),因为能够按比例且完整显示,又能在某个方向撑满控件;当希望控件被图片占满时(图片可以被适当裁剪),比较常用的就是centerCrop,因为可以保证图片按比例显示

    1.4K30

    ImageView ScaleType 解析

    fitXY:按照ImageView的大小显示,拉伸图片,填满ImageView。 fitCenter:将原图按比例缩放到ImageView的高度或者宽度,居中显示。...fitEnd:将原图按比例缩放到ImageView的高度或者宽度,在ImageView的底部显示 fitStart:将原图按比例缩放到ImageView的高度或者宽度,在ImageView的上部显示...centerCrop:以原图填满ImageView为目的,如果原图size大于ImageView的size,则与center_inside一样,按比例缩小,居中显示在ImageView上。...centerInside:以原图正常显示为目的,如果原图大小大于ImageView的size,就按照比例缩小原图的宽高,居中显示在ImageView中。...从上面的解析中,我们可以看出: 以FIT_开头的4种,它们的共同点是都会对图片进行缩放; 以CENTER_开头的3种,它们的共同点是居中显示,图片的中心点会与ImageView的中心点重叠; ScaleType.MATRIX

    48310

    Android drawable微技巧,你所不知道的drawable的那些细节

    那么同样的道理,如果系统是在drawable-xxxhdpi文件夹下面找到这张图的话,它会认为这张图是为更高密度的设备所设计的,如果直接将这张图在当前设备上使用就有可能会出现像素过高的情况,于是会自动帮我们做一个缩小的操作...下面我们来开始分析,mdpi密度的最高dpi值是160,而xxhdpi密度的最高dpi值是480,因此是一个3倍的关系,那么我们就可以猜测,放到drawable-mdpi文件夹下的图片在xxhdpi密度的设备上显示会被放大...xxxhdpi密度的最高dpi值是640,480是它的0.75倍,那么我们就可以猜测,放到drawable-xxxdpi文件夹下的图片在xxhdpi密度的设备上显示会被缩小至0.75倍。...可以这样来分析,根据我们刚才所学的内容,如果将一张图片放在低密度文件夹下,那么在高密度设备上显示图片时就会被自动放大,而如果将一张图片放在高密度文件夹下,那么在低密度设备上显示图片时就会被自动缩小。...后面我会抓紧时间继续准备新系列的内容,敬请期待。

    2.6K80

    图片的实时渲染和离屏渲染

    ImageView是不是真的无敌? 问:我想在一张图片上加上贴纸 答:简单,我使用Cavas,将贴纸放在特定的位置,然后生成一张新的Bitmap放入ImageView上。...问:我要添加多张贴纸在不同的位置上 答:简单,一样的道理啊,我还可以举一反三,Cavas解决一切啊。每添加一张贴纸就重新生成一张Bitmap放入ImageView上。...问:我可以实时移动贴纸到不同的位置吗? 答:当然可以啊,Canvas可以支持设置位置啊。 问:每改变一次位置,就要生成新的Bitmap,这样不断生成回收,是不是过分频繁了?...OpenGL有离屏渲染的概念,顾名思义为屏幕外的渲染,即在当前屏幕缓冲区以外,新开辟一个新缓冲区进行操作。...需要创建新的缓存区 离屏渲染的整个过程,需要多次切换上下文环境,当前屏幕—>离屏,渲染结束后将离屏缓冲区内容显示到当前屏幕,上下文切换回当前环境。

    1.9K20

    Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide图片缓存库的联系与区别

    ); volley Volley提供了一个新的控件NetworkImageView来代替传统的ImageView,这个控件的图片属性可以通过. mImageView.setImageUrl(url, imageLoader...在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。...当然glide可以让我们设置采样率,创建一个新的GlideModule将Bitmap格式转换到ARGB_8888。...尝试将ImageView调整成不同大小,但不管大小如何Picasso只缓存一个全尺寸的。Glide则不同,它会为每种大小的ImageView缓存一次。...尽管一张图片已经缓存了一次,但是假如你要在另外一个地方再次以不同尺寸显示,需要重新下载,调整成新尺寸的大小,然后将这个尺寸的也缓存起来。

    1.3K70

    SDWebImage 图片下载缓存框架 常用方法及原理

    (例如更新头像),专门处理相同url,但不同image的情况的 原因:默认情况下,SDWebImage会忽略Header中的缓存设置,将图片以url为key进行保存,url与图片是一一对应关系。...- 四、本地缓存 #import"SDImageCache.h" 介绍:很多时候我们可能拍照得到的一张图片要多个地方使用,那么我们就希望可以把这张图片放到缓存里面,然后每次用这张图片的时候就去通过特定的方式取即可...在沙盒的cache目录下创建一个指定名字的缓存空间(文件夹) - (id)initWithNamespace:(NSString *)ns; 在磁盘指定目录(directory)下创建一个指定名字的缓存空间...这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate: 如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。...图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。

    3.2K40

    iOS多线程之GCD、OperationQueue 对比和实践记录

    比如下面代码示例中:在for循环内部创建时,每个循环都是创建一个新的串行队列,里面只装一个任务,多个串行队列,结果整体上是并发的效果。想要串行效果,必须在for循环外部创建串行队列。...,在这创建时,每个循环都是一个新的串行队列,里面只装一个任务,多个串行队列,整体上是并行的效果。...如果您的应用程序是内存受限的,那么创建您自己的自动释放池可以让您以更有规律的间隔释放自动释放对象的内存。...答:串行队列,异步执行时,只开一个子线程;无所谓多个线程执行; 并发队列,异步执行时,会自动开多个线程,可以在多个线程并发执行不同的任务。 一个线程可以同时执行多个队列的任务吗?...术语解释摘录 异步任务(asynchronous tasks):由一个线程启动,但实际上在另一个线程上运行,利用额外的处理器资源更快地完成工作。 互斥(mutex):提供对共享资源的互斥访问的锁。

    1.6K40
    领券