OC/IOS 基础 获取屏幕信息

发布时间:2022-11-25 OC基础 XCODE SWIFT IOS

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。

浅红色文字:

代码如下(示例):

提示:这里对文章进行总结:

前言

正题

OC

下面的方法貌似是过iPhone12mini检测不出来.

//如果有新出的机型打开模拟器 截图查看尺寸(就知道新机型的分辨率),填上去就可以了。
#define isIphone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

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

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

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

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

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

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

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

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

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

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

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

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

#define isIPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)

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

#define isIPhoneXS ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone11 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone11Pro ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

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

#define isIPhone12 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12Pro ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12ProMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1284, 2778), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12Min ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1080, 2340), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13Pro ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13ProMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1284, 2778), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13Min ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1080, 2340), [[UIScreen mainScreen] currentMode].size) : NO)

下面这个方法是比较好的

// 获取设备型号然后手动转化为对应名称

- (NSString *)getDeviceName

{

    // 需要#import "sys/utsname.h"

    #warning 题主呕心沥血总结!!最全面!亲测!全网独此一份!!

    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";
    
    if ([deviceString isEqualToString:@"iPhone13,1"])    return @"12mini";

    if ([deviceString isEqualToString:@"iPhone14,4"])    return @"13mini";
 

    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;

}

Swift

在这里插入图片描述

import Foundation
import UIKit

/*

     手机设备型号    屏幕尺寸    分辨率点数 (pt)    屏幕显示模式    分辨率像素(px)    屏幕比例

     iPhone 3GS    3.5吋    320 x 480    @1x    320 x 480    -

     iPhone 4/4S    3.5吋    320 x 480    @2x    640 x 960    -

     iPhone 5/5S/5C/SE    4.0吋    320x568    @2x    640x1136    16:9

     iPhone 6/6s/7/8/SE 2    4.7吋    375x667    @2x    750x1334    16:9

     iPhone 6p/7p/8p    5.5吋    414x736    @3x    1242x2208    16:9

     iPhone XR/11    6.1吋    414x896    @2x    828x1792    19.5:9

     iPhone X/XS/11 Pro    5.8吋    375x812    @3x    1125x2436    19.5:9

     iPhone XS Max/11 Pro Max    6.5吋    414x896    @3x    1242x2688    19.5:9

     iPhone 12 mini    5.4吋    360x780    @3x    1080x2340    19.5:9

     iPhone 12/12 Pro    6.1吋    390x844    @3x    1170x2532    19.5:9

     iPhone 12 Pro Max    6.7吋    428x926    @3x    1284x2778    19.5:9

     iPhone 13 mini    5.4吋    360x780    @3x    1080x2340    19.5:9

     iPhone 13/13 Pro    6.1吋    390x844    @3x    1170x2532    19.5:9

     iPhone 13 Pro Max    6.7吋    428x926    @3x    1284x2778    19.5:9

     */

public enum IPhoneSize: Int {
    case iPhone_3GS_4_4S
    case iPhone_5_5S_5C_SE
    case iPhone_6_6s_7_8_SE2
    case iphone_6p_7p_8p
    case iphone_XR_11
    case iphone_X_XS_11Pro
    case iphone_XSMax_11ProMax
    case iphone_12mini_13mini
    case iphone_12_12Pro_13_13Pro
    case iphone_12ProMax_13ProMax
    case unKnow
}

public func iphoneSizeAction() -> IPhoneSize {

    if UIScreen.main.bounds.size.height == 480 {
        return IPhoneSize.iPhone_3GS_4_4S
    } else if UIScreen.main.bounds.size.height == 568 {
        return IPhoneSize.iPhone_5_5S_5C_SE
    } else if UIScreen.main.bounds.size.height == 667 {
        return IPhoneSize.iPhone_6_6s_7_8_SE2
    } else if UIScreen.main.bounds.size.height == 736 {
        return IPhoneSize.iphone_6p_7p_8p
    } else if UIScreen.main.bounds.size.height == 896 {
        return IPhoneSize.iphone_XR_11
    } else if UIScreen.main.bounds.size.height == 812 {
        return IPhoneSize.iphone_X_XS_11Pro
    } else if UIScreen.main.bounds.size.height == 896 {
        return IPhoneSize.iphone_XSMax_11ProMax
    } else if UIScreen.main.bounds.size.height == 780 {
        return IPhoneSize.iphone_12mini_13mini
    } else if UIScreen.main.bounds.size.height == 844 {
        return IPhoneSize.iphone_12_12Pro_13_13Pro
    } else if UIScreen.main.bounds.size.height == 926 {
        return IPhoneSize.iphone_12ProMax_13ProMax
    } else {
        return IPhoneSize.unKnow
    }
    
}

更多相关推荐


可选项本质

发布时间:2021-05-04 SWIFT
varnum:Optional<Int>=nilvarnum1:Int?=nilnum?+=2num1?+=3其实这两个变量num和num1本质是一样的,都是Int类型的可选项然后点进Optional官方也是提供的这两种方式,只是它解释用的转换符,因为字符串转换Int并不一定成功,所以会返回一个可选项,再看声明是一个泛型枚举枚举有两个case,一个some一个noneenumOptio...

java bind object-c by using bro-gen

发布时间:2015-10-07 JAVA ROBOVM OBJECT-C IOS
前言:系统环境:Github上下载即可,无需翻墙,下载卡顿,可能是网速原因。1首先在Github上下载robovm地址:https://github.com/robovm/robovm2同样在Github上下载一个基于robovm来生成C/Objective-Cbindings的工具robovm-bro-gen地址:https://github.com/robovm/robovm-bro-genG...

支持图片自动裁剪(CDN)-WebImageView

发布时间:2022-09-21 开发语言 SWIFT 项目优化升级 IOS
背景客户端往往存在大量需要显示网络图片的场景,如果内容服务器不经过处理,直接下发原始图片给客户端,会造成严重的网络资源和内存资源的浪费,还会影响性能,造成卡顿,尤其是在瀑布流中。假设模板封面图片是4K图片,原始大小30M。内容服务器可能分发几百上千个模板给客户端,客户端在模板列表中展示时,会耗费巨量流量,内存也会极度膨胀,可想而知这会带来怎样一种灾难。所以最优的做法是,内容服务器只下发合适大小的图...

TiDevice,Windows上运行IOS自动化

发布时间:2022-11-24 自动化 IOS WINDOWS PYTHON
TiDeviceTidevice是由阿里开发的,不依赖Xcode就可以启动WebDriverAgent(WDA),因此可以在Windows系统直接运行xctest。Tidevice安装首要要正确配置好python的环境,然后使用python的安装命令即可,安装命令如下:pip3installtidevice成功之后,可以直接在CMD窗口中输入下tidevice命令,看下能否正常的识别;Tidevi...

Flutter 实现局部刷新 StreamBuilder 实例详解

发布时间:2022-11-25 ANDROID FLUTTER IOS
一、前言在flutter项目中,页面内直接调用setState方法会使得页面重新执行build方法,导致内部组件被全量刷新,造成不必要的性能消耗。出于性能和用户体验方面的考虑我们经常会使用局部刷新代替全量刷新进行页面更新的操作。包括Provider、ValueNotifier和StatefulBuilder等在内的技术方案,都能够帮助我们实现Flutter局部刷新的需求。本文记录的是通过Strea...

贺臣的博客

发布时间:2015-05-18 内存管理 IOS
贺成的博客写的文章很好 这篇是讲@property的也讲一些内存管理http://www.cnblogs.com/andyque/archive/2011/08/03/2125728.html...

ios开发学习--Cocoa 开发--系列教程1

发布时间:2012-12-14 移动开发 设计模式 XCODE
深入浅出Cocoa之CoreData(1)-框架详解http://ios.itmdc.com/thread-6120-1-5.html深入浅出Cocoa之CoreData(2)-代码示例http://ios.itmdc.com/thread-6129-1-5.html解析Cocoa单态singleton设计模式http://ios.itmdc.com/thread-5785-1-7.htmlCoc...

iOS强制屏幕旋转

发布时间:2016-05-26 屏幕 IOS
/** 强制旋转屏幕为纵向(注:这种方式键盘不能旋转过来;iOS8.x下UIAlterView旋转不过来 ) @return */+(void)rotateOrientationPortrait{  if([[UIDevicecurrentDevice]respondsToSelector:@selector(setOrientation:)]){    SELselector=NSSelecto...

程序员跳槽前 “必须“ 了解的事

跳槽前一定要清楚此时自己面临的瓶颈是什么,如果换一家公司是否能解决?不要看了些鸡汤,就马上找老板谈加工资。不要因为薪资待遇差而慢待自己工作,要通过工作快速提高自己,不要耽误自己的时间。经常从工作中做总结,输出为博客,这是一个思考的过程,能提高自己的专业素养,也是建立个人品牌的过程。沟通能力是不可或缺的综合素养的一部分,综合能力固然重要,切记不要忘了自己的专业知识,如果这个平台突然没了,去另外一个平...

函数

发布时间:2015-12-22 SWIFT
函数目标掌握函数的定义掌握外部参数的用处掌握无返回类型的三种函数定义方式代码实现函数的定义格式func函数名(行参列表)->返回值{代码实现}调用letresult=函数名(值1,参数2:值2...)funcsum(a:Int,b:Int)->Int{returna+b}letresult=sum(10,b:20)没有返回值的函数,一共有三种写法省略()Voidfuncdemo(str...

NSRunLoop

发布时间:2013-05-18 多线程 NSRUNLOOP IOS
NSRunLoop大部分情况在多线程编程的时候才会用到。。但是一般不会用NSRunLoop,因为它不是线程安全的。一般都建议用CFRunLoop,这个是线程安全的。inputsourceandport-basedcustomsource这些操作,是向线程里面添加操作的。添加的这些操作,会在该线程执行空间的调度下执行。通俗的理解就是如果你创建的了一个子线程,子线程的运行函数如下-(void)subT...

xcode编译环境配置

发布时间:2011-09-01 BUILD XCODE IPHONE TUTORIAL
xcode的build里可以配置很多参数,如指定头文件目录,库目录等等,可以用到一些宏,如${SDK_DIR}表示skd的路径,这样配置的好处就是当把工程放在不同机器上编译不会出错。具体参看:http://developer.apple.com/library/mac/#documentation/DeveloperTools/Reference/XcodeBuildSettingRef/0-In...

XCode编译器:一个关于llvm-gcc-4.2的一个难解的错误

发布时间:2012-03-26 移动开发 C/C++ XCODE
最近在使用Xcode4.2进行一些小的开发,过程中难免会使用一些现成的代码,可是大部分网路上的代码都是3.2版本的,在使用的时候总是出现一些问题,某些问题还是很好解决的,可是最近遇到这样一个问题,在编译的时候,总是提示这个错误:“Unsupportedcomplier“GCC4.2””.查阅了一些资料后终于明白,原来3.2默认使用的是GCC编译,而4.2默认使用的是ARC编译,这难免会导致这样的错...

XCode编译器介绍

发布时间:2014-09-12 XCODE
From:http://blog.csdn.net/yu0089/article/details/8220244在XCode中,我们经常会看到这些编译选项(如下图),有些人可能会有些茫然,本文将对GCC4.2、LLVMGCC4.2、LLVMcompliler2.0三个编译选项进行一个详细的介绍。 GCC   GCC(GNUCompilerCollection,GNU编译器套装),是一套由GNU开发...

ios 技术支持网址

发布时间:2019-06-13 技术 IOS
ios技术支持网址Ifyouhaveanyquestions,youcaneitherleaveamessageorsendthequestionstoyouremailaddress.Wewillanswerthemforyouinthefirsttime.Address:1984guitarboy@163.com...

使用iOS技术

发布时间:2014-11-27 WATCHKIT WATCHKIT编程指南 SWITF IOS
WatchKit应用扩展可以使用绝大多数iOS技术。由于应用扩展和应用还是有一些不同,因此某些技术的使用可能会受到限制,或者不受到推荐。下面是决定是否使用特定技术的准则:· 避免使用需要用户权限的技术,比如CoreLocation。在WatchKit应用扩展中使用该技术的话,可能会在您第一次请求使用时导致用户的iPhone上显示出一个意想不到的提示。更糟糕的是,这个状况可能会在任何时间出现,即使用...

iOS开发者如何提高自己的水平

发布时间:2017-02-15 IOS
转载不知道你有没有参与或是旁观过iOS开发的黑客马拉松,我觉得这是非常好的事情,在这里人们几乎不睡觉,一起脑洞大开,在Objective-C运行时环境下,利用iOS的相关知识攻城略地,度过激情四射的72个小时。对于我来说,它们让人心潮澎湃,我的所有平台知识都在头脑风暴下接受考验,我的技能也得到锤炼。在某场活动里有一次我和我们组的一个伙伴在聊天的时候,他问我:“MarkD,我要怎么样才能学到所有那些...

30个超强的逼真立体声效果ipad iOS用户界面设计

发布时间:2012-04-06 IPAD IOS
日期:2012-4-5  来源:GBin1.com继续上一篇文章23个带给你灵感的最新iOS界面设计,这里我们介绍30个超酷的3D立体声iPad的iOS界面设计,希望能给大家带来灵感!原文来自:30个超强的逼真立体声效果ipadiOS用户界面设计...

Mac系统下Flutter安装教程

发布时间:2022-11-23 ANDROID XCODE FLUTTER FLUTTER开发 IOS
一、下载Flutter1、第一种方式gitrepo方式:执行下列命令下载最新的flutter代码(系统请先安装Git)gitclone-bbetahttps://github.com/flutter/flutter.git2、第二种方式Flutter官网下载:https://docs.flutter.dev/development/tools/sdk/releases?tab=macos二、安装:...

英特尔高管晒照片不小心泄密,正在研发的雷电5就这样暴露了

发布时间:2021-08-03 微软 IOS HTML 接口 GOOGLE
晓查发自凹非寺量子位报道|公众号QbitAI万万没想到,英特尔执行副总裁GregoryBryant去了一趟以色列,晒了几张照片,就把英特尔最新的技术给泄露了。这位副总裁拍了4张英特尔以色列实验室的照片,发到Twitter上,其中一张就有英特尔正在研发的雷电5(Thunderbolt5)详细参数。他在察觉不妙后快速删掉了这张照片,但还是被网友保存了下来。△ 图片来源:AnandTech在这张图片中,...

IOS字体

发布时间:2014-05-26 IOS
.网上搜索字体文件(后缀名为.ttf,或.odf)2.把字体库导入到工程的resouce中3.在程序viewdidload中加载一下一段代码NSArray*familyNames=[UIFontfamilyNames];      for(NSString*familyNameinfamilyNames){          printf("Family:%s\n",[familyNameUTF8...

相亲交友源码中,音频AAC解码的实现代码

发布时间:2021-11-15 IOS XCODE 相亲交友源码 音视频
音频AAC解码在相亲交友源码中,为了提升音频数据的传输效率,我们需要对音频数据进行编码处理,但是编码后的音频文件是无法直接播放的,需要进行解码处理,今天我们就来看一下在相亲交友源码开发中,实现音频AAC解码的相关代码。在解码时👉🏻我们需要封装一个工具类CCAudioDecoder。解码工具类头文件#import<Foundation/Foundation.h>#import<AV...

IOS中定时器NSTimer的开启与关闭

发布时间:2015-07-02 NSTIMER IOS
本文转载至myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil repeats:NO];  //不重复,只调用一次。timer运行一次就会自动停止运行    重复调用计时器方法:[cpp] viewplaincopytimer = ...

【转】IOS中定时器NSTimer的开启与关闭

发布时间:2016-07-27 NSTIMER IOS
原文网址:http://blog.csdn.net/enuola/article/details/8099461调用一次计时器方法: [cpp] viewplain copy  myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scrollTimer) userInfo:nil ...

Xcode提示“expression is not assignable”

发布时间:2018-06-18 IOS 开发学习 IOS
https://segmentfault.com/q/1010000000177216你的问题是:self.view.frame.size.height=100f;这样写没法通过编译,编译器会报错"expressionisnotassignable"原因是,这句话里面的几个点有两种不同的含义。self.view.frame是Objective-C语法,是读取view属性的frame属性,在Obje...

Expression is not assignable (OC为什么不能直接修改结构体属性)!

发布时间:2016-08-25 XCODE OBJECT-C 结构体 OC IOS
OC为什么不能直接修改结构体属性?self.image.frame.origin.x=20;这样写没法通过编译,编译器会报错"expressionisnotassignable"原因是,这句话里面的几个点有两种不同的含义。self.image.frame是Objective-C语法,是读取image属性的frame属性,在Objective-C中使用点来访问属性只是一种语法,所以self.imag...

转: Xcode提示“expression is not assignable”

发布时间:2016-04-16 移动开发 C/C++ XCODE
2019独角兽企业重金招聘Python工程师标准>>>self.view.frame.size.height=100f;这样写没法通过编译,编译器会报错"expressionisnotassignable"原因是,这句话里面的几个点有两种不同的含义。self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访...

iOS Xcode 编译错误 “expression is not assignable”

发布时间:2017-05-12 编译错误 XCODE IOS开发
你的问题是:self.view.frame.size.height=100f;这样写没法通过编译,编译器会报错"expressionisnotassignable"原因是,这句话里面的几个点有两种不同的含义。self.view.frame是Objective-C语法,是读取view属性的frame属性,在Objective-C中使用点来访问属性只是一种语法糖,所以self.view.frame这句...

Xcode同时兼容Xcode7和Xcode8,两个版本并存,也适用于先升8再安装7

发布时间:2016-10-21 XCODE
先吐槽一下之前看到的一个教程,如下:先在应用程序内,拷贝一份之前的xcode,然后再安装新版本,发现这种安装完成就是在之前上面迭代了 有木有?等于没任何作用 我这边就是不小心先升级了8,然后再安装7.31 步骤如下:1、找到之前的版本,重命名,对,直接对红框内重命名,不需要点进去,比如我因为已经更新了,版本是xcode8,但默认名称只有Xcode,为了区分,重命名Xcode8。比如, 2、然后到官...

IOS开发—截屏

发布时间:2015-08-18 位图 IOS
(void)actionShot:(UIButton*)sender{         //可以隐藏按钮,渲染完后显示回来    self.buttonShot.hidden=YES;         //创建图形上下文    UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.view.frame.size.width,self.view...

Swift3.0学习

发布时间:2016-08-02 SWFIT3-0 SWIFT
swift3.0的初步认识在swift3.0中取消中括号[],以点语法形式取消了所有的NS开头的关键词1.创建视图OC中————[[UIViewalloc]initWithframe:];Swfit中————UIView(frame:)类名()==allocinit2.类方法OC————[UIColorredColor]Swift————UIColor.red()3.访问当前对象的属性,可以不使用...

iOS 通过定位获取常驻后台

转自 http://www.jianshu.com/p/d1ecc467faff我们知道ios的应用,大部分都是进入后台,就不会执行任何操作,但是,很多时候我们希望程序进入后台,也能执行一些检测操作,比如说,应用进入后台,我们仍然可以实时去获取当前的位置信息。下面我们来了解下,ios获取后台时间的几种方式根据苹果文档中关于后台执行的描述,任何app都有3分钟左右的后台任务执行时间。3分钟后,app...

渐变色

发布时间:2016-01-05 IOS
@interfaceMemberShipCardItem()@property(assign,nonatomic)CGPointstartPoint;@property(assign,nonatomic)CGPointendPoint;@property(strong,nonatomic)UIColor*startColor;@property(strong,nonatomic)UIColor*e...

iOS开发之画图板(贝塞尔曲线)

发布时间:2014-09-15 画图板 IOS
  贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能。如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解。这篇博文的重点不在于如何用使用贝塞尔曲线,而是利用贝塞尔划线的功能来封装一个画图板。  画图板的截图如下,上面的白板就是我们的画图板,是自己封装好的一个UIView,下面会详细的介绍如何封装这个画图板,下面的控件用来控制我们画图板的属性以及Undo...

IOS之Quartz

http://space.189works.com/home-space-uid-10430378-do-blog-id-71065.htmlIOS之Quartz已有22次阅读2012-10-1913:03 | 的, 是, interface, 应用程序, current14.1Quartz概述14.2绘制基本几何图形14.3绘制图像和文本14.4坐标14.5变换14.6图像拾取器 14.1Qua...

ios--截屏--UIGraphicsBeginImageContext(CGSize)

发布时间:2014-05-22 UIGRAPHICSBEGINIMAGE IOS开发 IOS
原文转自:http://blog.csdn.net/ch_soft/article/details/7338012UIGraphicsBeginImageContext(CGSize)截图,是从屏幕原点开始截取size大小的图片如何截取任意起点开始size大小的图片,办法就是用CGContextTranslateCTM转换原点坐标//导入头文件//创建一个基于位图的图形上下文并指定大小为CGSiz...

stretchableImageWithLeftCapWidth 的使用

发布时间:2016-02-19 UIIMAGE IOS
UIImagestretchableImageWithLeftCapWidth的使用一直比较迷惑,不明白,并且在开始的使用中总是失败,结合着网上的资料,经过多次实验,终于明白他的用处了, leftCapWidth,是左侧需要保留的像素数,topCapHeight是顶部需要保留的像素数,然后中间的1像素用于中间的平铺,达到最后所需要的尺寸。效果相当于只能保持一边固定,拉伸另一边。 并且以前使用ima...

Swift实战-小QQ(第2章):QQ侧滑菜单

发布时间:2015-03-09 SWIFT
QQ侧滑实现架构:需要建立以下几个ViewController:1.XQBaseViewController 2.LeftViewController3.RightViewController4.ContentViewController(中间显示的主要内容)5.SliderViewController(用于控制侧滑动画,控制左右侧栏的显示和隐藏)1importUIKit2classSliderV...

Swift实战-小QQ(第1章):QQ登录界面

发布时间:2015-10-09 SWIFT
1.新建小QQ项目2.将所需用到的图片资源(resource)文件夹,添加到项目中.并新建一个登录页面:LoginViewController.swift3.修改LoginViewController.swift代码为123456importUIKitclassLoginViewController:UIViewController{     // } 4.将Main.storyboard的默认的...

iOS_计算文件大小

发布时间:2015-04-15 文件大小 IOS
+(float)folderSizeAtPath:(NSString*)folderPath{NSFileManager*manager=[NSFileManagerdefaultManager];if(![managerfileExistsAtPath:folderPath])return0;NSEnumerator*childFilesEnumerator=[[managersubpathsA...

iOS_计算文件大小,删除缓存

发布时间:2016-03-02 XCODE IOS开发 IOS
//获得缓存路径self.cachesPath=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES).lastObject;/***********************缓存管理***********************/#pragmamark单个文件的大小+(longlong)fileSize...

猫猫学IOS(三十一)UI之Quartz2D图形上下文栈

发布时间:2016-09-12 QUARTZ2D IOS
转载自:http://blog.csdn.net/u013357243/article/details/45500879地址:http://blog.csdn.net/u013357243?viewmode=contents首先,前面博客说过。qurza2d的上下文中有绘图信息和绘图的属性。但是他是怎么绘制到上下午中的呢?我们画图时候一半会用这三个步骤:(1)获取上下文(2)绘图(3)渲染这里引申...

利用预渲染加速iOS设备的图像显示

发布时间:2014-04-14 IOS图像预加载 IOS
最近在做一个UITableView的例子,发现滚动时的性能还不错。但来回滚动时,第一次显示的图像不如再次显示的图像流畅,出现前会有稍许的停顿感。于是我猜想显示过的图像肯定是被缓存起来了,查了下文档后发现果然如此。后来在《ImprovingImageDrawingPerformanceoniOS》一文中找到了一些提示:原来在显示图像时,解压和重采样会消耗很多CPU时间;而如果预先在一个bitmapc...

iOS开发系列--打造自己的“美图秀秀”

发布时间:2017-03-03 IOS 绘图 IOS
概述在iOS中可以很容易的开发出绚丽的界面效果,一方面得益于成功系统的设计,另一方面得益于它强大的开发框架。今天我们将围绕iOS中两大图形、图像绘图框架进行介绍:Quartz2D绘制2D图形和CoreImage中强大的滤镜功能。Quartz2D基本图形绘制视图刷新其他图形上下文CoreImageQuartz2D在iOS中常用的绘图框架就是Quartz2D,Quartz2D是CoreGraphics...