分类: IOS技术

IOS技术

iOS开发苹果支持中文字体,和使用字体

1.中文字体

转自:https://zhidao.baidu.com/question/1239016138772367339.html

ios7英文字体:Helvetica 下的各种系统,例如Helvetica Neue等,细究起来很烦,不同的地方用不同的系统,但都是Helvetica家族下的
ios7中文字体:STHeitiSC-Light 黑体-简

2.苹果使用字体
转自:http://blog.csdn.net/onlyou930/article/details/7422097
label.font  =  [UIFont fontWithName: @” Arial-BoldItalicMT ”  size: 24 ];

字体名如下:

Font Family: American Typewriter
Font: AmericanTypewriter
Font: AmericanTypewriter-Bold

Font Family: AppleGothic
Font: AppleGothic

Font Family: Arial
Font: ArialMT
Font: Arial-BoldMT
Font: Arial-BoldItalicMT
Font: Arial-ItalicMT

Font Family: Arial Rounded MT Bold
Font: ArialRoundedMTBold

Font Family: Arial Unicode MS
Font: ArialUnicodeMS

Font Family: Courier
Font: Courier
Font: Courier-BoldOblique
Font: Courier-Oblique
Font: Courier-Bold

Font Family: Courier New
Font: CourierNewPS-BoldMT
Font: CourierNewPS-ItalicMT
Font: CourierNewPS-BoldItalicMT
Font: CourierNewPSMT

Font Family: DB LCD Temp
Font: DBLCDTempBlack

Font Family: Georgia
Font: Georgia-Bold
Font: Georgia
Font: Georgia-BoldItalic
Font: Georgia-Italic

Font Family: Helvetica
Font: Helvetica-Oblique
Font: Helvetica-BoldOblique
Font: Helvetica
Font: Helvetica-Bold

Font Family: Helvetica Neue
Font: HelveticaNeue
Font: HelveticaNeue-Bold

Font Family: Hiragino Kaku Gothic **** W3
Font: HiraKakuProN-W3

Font Family: Hiragino Kaku Gothic **** W6
Font: HiraKakuProN-W6

Font Family: Marker Felt
Font: MarkerFelt-Thin

Font Family: STHeiti J
Font: STHeitiJ-Medium
Font: STHeitiJ-Light

Font Family: STHeiti K
Font: STHeitiK-Medium
Font: STHeitiK-Light

Font Family: STHeiti SC
Font: STHeitiSC-Medium
Font: STHeitiSC-Light

Font Family: STHeiti TC
Font: STHeitiTC-Light
Font: STHeitiTC-Medium

Font Family: Times New Roman
Font: TimesNewRomanPSMT
Font: TimesNewRomanPS-BoldMT
Font: TimesNewRomanPS-BoldItalicMT
Font: TimesNewRomanPS-ItalicMT

Font Family: Trebuchet MS
Font: TrebuchetMS-Italic
Font: TrebuchetMS
Font: Trebuchet-BoldItalic
Font: TrebuchetMS-Bold

Font Family: Verdana
Font: Verdana-Bold
Font: Verdana-BoldItalic
Font: Verdana
Font: Verdana-Italic

Font Family: Zapfino
Font: Zapfino

UIFont fontWithName 后不知道字体的名字,看了下面的全解决!

%title插图%num


3.打印字体族,和字体名字
转自:http://www.2cto.com/kf/201505/397306.html

ios的提供了很多的字体样式。有时候我们在开发应用的时候可能用到不同的字体,通过此Demo我们可以获取到所有的字体样式供我们选择。 首先获取字体字体族科名字,再通过族科的名字获取到字体的名字。

    NSArray *arr  = [UIFont familyNames];

    for (NSString *str in arr) {

        NSArray *at = [UIFont fontNamesForFamilyName:str];

        for (NSString *fffff in at) {

            NSLog(@”字体名字 %@”,fffff);

        }

    }

然后再使用如下代码就可以修改字符串的字体 。


//    NSString * testStr  = @我随手一打就是漂亮的十五个字了;

NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:testStr];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,3)];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(3,4)];

[str addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(7,4)];

[str addAttribute:NSFontAttributeName value:[UIFont fontWithName:_fontArray[indexPath.row] size:30] range:NSMakeRange(0, 15)];

 
?显示中文和英文的效果不是很一致,英文的效果明显一些,如下是部分效果截图。具体在Demo里面有。
\

\

 

\

iOS 修改系统定位(非越狱)

修改系统定位其实是不太可能的(除非越狱)。那么我们今天就通过一个简单方式来修改系统的定位,当然是有一定的限制的。

首先:我们先创建一个项目,名字随意。然后一个文件LocationPosition.gpx如下:

%title插图%num

%title插图%num

然后打开这个LocationPosition.gpx文件如下:

<?xml version=”1.0″?>
<gpx version=”1.1″ creator=”Xcode”>

<!–
Provide one or more waypoints containing a latitude/longitude pair. If you provide one
waypoint, Xcode will simulate that specific location. If you provide multiple waypoints,
Xcode will simulate a route visiting each waypoint.
–>
<wpt lat=”39.89606702936854″ lon=”116.36890332416854″>

<name>Cupertino</name>

<!–
Optionally provide a time element for each waypoint. Xcode will interpolate movement
at a rate of speed based on the time elapsed between each waypoint. If you do not provide
a time element, then Xcode will use a fixed rate of speed.

Waypoints must be sorted by time in ascending order.
–>
<time>2014-09-24T14:55:37Z</time>
</wpt>

</gpx>
直接修改<wpt lat=”39.89606702936854″ lon=”116.36890332416854″>其中: lat是纬度,lon是经度,然后保存即可,当然也可以添加多个。

*后一步: Product->Scheme->Edit Scheme->Run->Options->Core Location->Default Location 选择:LocationPostion 如下图:

%title插图%num

然后运行XCode到真机上,即可以实现系统定位了。

这样有个问题就是,如果我们stop了XCode发现就不管用了,那么怎么解决呢。

这个可以在运行后直接拔掉链接线。那么就可以无忧的实现系统定位了。好了如果还有什么问题可以自己努力了。

iOS系统回退教程

如果你升级了系统之后觉得体验不好或者不习惯怎么办呢?这篇教程就教你回退iOS系统,也就是降级。
1.首先下载iOS固件,访问苹果官方固件下载网站,你会看到4个步骤,分别是:
Choose a product
Choose a platform
Choose a version
Download!
你只需要按照这4个步骤来选择适用你手机的固件,
选择你的产品类型,点击iPhone;

选择手机型号,Global是全网通版本,GSM是移动/联通版本,请确认自己手机的版本,千万不要选错了;

选择固件版本,Signed IPSWs下面的绿色列表是你可以选择的iOS版本,也就是说,这些版本的官方验证通道还没有关闭,是可以正常使用的,选择其中的一个你需要的版本,点击进入下载页面。如果绿色列表中没有你要的版本,说明你要的版本已不支持回退,本文以下内容可以不用再看了;

点击Download按钮下载即可,下载的文件是一个后缀为.ipsw的文件。

2.下载windows PC版本的iTunes(Microsoft下载,点击【获取】按钮即可安装;也可以从Apple官网下载)。
3.安装好iTunes后打开,并将手机通过USB数据线(*好用原装数据线)连接到你的电脑,iTunes检测到后会连接到你的手机,手机上会有弹窗,点击信任即可,连接好后,iTunes左上角会有一个手机的图标出现,点击手机图标(也可能会自动打开与手机相关的页面)打开手机相关页面。
4.数据备份,升级一般数据不会丢失,降级则数据会丢失(这种情况下一定要数据备份),但是为了数据安全性,建议无论是升级还是降级都先备份数据,备份的方式有两种:通过iCloud或者iTunes备份,这里我们选择通过iTunes手动备份(速度快,存储在电脑上),因为只有手动备份才能修改7中说的版本号,备份完毕后再执行下一步操作。
5.升/降级前在设置-顶部头像-iCloud-查找我的iPhone中点击关闭。如果你下载的固件版本低于当前版本选择【恢复iPhone】,如果高于当前版本,则选择【检查更新】,注意点击前先按住【Shift】按键(Mac电脑按住【ALT】按键),然后在弹窗中选择你之前下载好的固件(ipsw文件),然后就是较长一段时间的等待咯。切记中途不要插拔USB数据线。
6.系统升/降级完成后(正常情况下是这样,也有可能中途会报错失败,那样的话你得执行恢复操作,iTunes会有相应的操作提示,也就是还原你之前的系统),下一步就是数据的还原了,升级的话一般数据都还在,降级的话这一步是必须的(降级后相当于拿到了一部新手机,指纹都得重新录入,操作步骤就不说了,其中会提示数据恢复,可以先跳过),降级后的数据恢复请先阅读下面的第7点,现在之前备份的数据就派上用场了,iTunes里面有一个数据恢复,选择你之前备份的数据恢复即可。
7.但是降级后有一个问题就是有可能你之前在高版本系统上备份的数据不能用于低版本的数据恢复,解决办法就是找到你电脑上iTunes的备份目录,我的是在C:\Users\用户名\Apple\MobileSync\Backup下,有一个名字是字母数字混合且很长的文件夹,这就是你备份的数据,打开它,里面有一个文件叫Info.plist,编辑它,修改Product Version下面的版本号,比如你回退的版本号是12.4.1, 注意不要有空格,然后保存即可。
<key>Product Version</key>
<string>12.4.1</string>
1
2
唠嗑:
说一下为啥我会去降级,12.4.1是iOS12的*后一个版本,我的手机是iphone8,一款支持3D touch 的机型,我升级iOS13后发现这个功能变得不伦不类的,iOS13为了照顾那些新的不支持3D touch的机型,搞了一个haptic touch,就是用长按来实现一些类似3D touch的体验,但是经过我的体验过后,发现在已经支持3D touch的机型上存在问题,差不多两个功能同时存在了,反而使3D touch的体验大打折扣,幸运的是我在12*后一个版本关闭验证通道前回退到了12,从此,我的iOS就停留在了12.4.1,直到今天(2020.8)在*新的iOS中依旧没有修复这个问题,我也给苹果发过邮件,希望在已经支持3D touch的机型中不要引入haptic touch, 因为根本不需要,而且haptic touch也代替不了3D touch, 因为3D touch是有不同压感的,不同的压感有不同的反馈,这是硬件支持的,单纯的软件层

iOS开发中点击推送跳转到指定页面

消息推送在现在的App中很常见,但同一个App中推送的消息可能有多种类型,点击推送需要跳转到不同的指定页面。

做法:

我们在接收到推送的时候发送通知,每个页面都接收通知,如果有通知就在当前页面进行页面的跳转跳转到指定页面。

如果在每个页面中都添加接收通知的代码会很麻烦,我们可以将接收通知的代码添加到基类中,这样就简单、方便了许多。可有些项目中的代码中可能没有基类,就像我们公司中的这个项目,那也没问题,我们可以为视图控制器添加一个分类,将接收通知的代码添加到分类中,再在pch文件中导入此分类。

接收推送发送通知的代码:

– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

 

//关闭友盟自带的弹出框

[UMessage setAutoAlert:NO];

 

[UMessage didReceiveRemoteNotification:userInfo];

 

[[NSNotificationCenter defaultCenter] postNotificationName:@”pushNoti” object:nil];

 

}

接收通知进行页面跳转的代码,此代码在视图控制器的分类中:
+ (void)load

{

 

Method m1;

Method m2;

 

// 运行时替换方法

m1 = class_getInstanceMethod(self, @selector(statisticsViewWillAppear:));

m2 = class_getInstanceMethod(self, @selector(viewWillAppear:));

 

method_exchangeImplementations(m1, m2);

 

 

m1 = class_getInstanceMethod(self, @selector(statisticsViewWillDisappear:));

m2 = class_getInstanceMethod(self, @selector(viewWillDisappear:));

 

method_exchangeImplementations(m1, m2);

}

– (void) statisticsViewWillAppear:(BOOL)animated

{

[self statisticsViewWillAppear:animated];

[MobClick beginLogPageView:NSStringFromClass([self class])];

 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(push) name:@”pushNoti” object:nil];

}

-(void) statisticsViewWillDisappear:(BOOL)animated

{

[self statisticsViewWillDisappear:animated];

[MobClick endLogPageView:NSStringFromClass([self class])];

 

[[NSNotificationCenter defaultCenter] removeObserver:self name:@”pushNoti” object:nil];

}

– (void)push{

 

NotificationVC * notiVC = [[NotificationVC alloc] init];

notiVC.hidesBottomBarWhenPushed = YES;

[self.navigationController pushViewController:notiVC animated:YES];

}

该项目中之前的友盟统计就添加到了该分类中.
好了,本篇博客的主要内容就这些,谢谢阅读。

iOS NSNotification的使用

如果在一个类中想要执行另一个类中的方法可以使用通知
1.创建一个通知对象: 使用notificationWithName:object: 或者 notificationWithName:object:userInfo:

NSNotification* notification = [NSNotification notificationWithName:kImageNotificationLoadFailed(connection.imageURL)
object:self
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:error,@”error”,connection.imageURL,@”imageURL”,nil]];

这里需要注意的是,创建自己的通知并不是必须的。而是在创建自己的通知之前,采用NSNotificationCenter类的方法 postNotificationName:object: 和 postNotificationName:object:userInfo:更加便利的发出通知。这种情况,一般使用NSNotificationCenter的类方法defaultCenter就获得默认的通知对象,这样你就可以给该程序的默认通知中心发送通知了。注意:每一个程序都有一个自己的通知中心,即NSNotificationCenter对象。该对象采用单例设计模式,采用defaultCenter方法就可以获得唯一的NSNotificationCenter对象。

注意:NSNotification对象是不可变的,因为一旦创建,对象是不能更改的。

2.注册通知:addObserver:selector:name:object:

可以看到除了添加观察者之外,还有其接收到通知之后的执行方法入口,即selector的实参。因此为了进行防御式编程,*好先检查观察者是否定义了该方法。例如:添加观察者代码有

[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(aWindowBecameMain:)
name:NSWindowDidBecomeMainNotification object:nil];

这里保证了self定义了aWindowBecameMain:方法。而对于一个任意的观察者observer,不能保证其对应的selector有aWindowBecameMain:,可采用[observer respondsToSelector:@selector(aWindowBecameMain:)]] 进行检查。所以完整的添加观察者过程为:

if([observer respondsToSelector:@selector(aWindowBecameMain:)]) {
[[NSNotificationCenter defaultCenter] addObserver:observer selector:@selector(aWindowBecameMain:) name:NSWindowDidBecomeMainNotification object:nil];
}

注意到addObserver:selector:name:object:不仅指定一个观察者,指定通知中心发送给观察者的消息,还有接收通知的名字,以及指定的对象。一般来说不需要指定name和object,但如果仅仅指定了一个object,观察者将收到该对象的所有通知。例如将上面的代码中name改为nil,那么观察者将接收到object对象的所有消息,但是确定不了接收这些消息的顺序。如果指指定一个通知名称,观察者将收到它每次发出的通知。例如,上面的代码中object为nil,那么客户对象(self)将收到任何对象发出NSWindowDidBecomeMainNotification通知。如果既没有指定指定object,也没有指定name,那么该观察者将收到所有对象的所有消息。

3.发送通知:postNotificationName:object:或者performSelectorOnMainThread:withObject:waitUntilDone:

例如程序可以实现将一个文本可以进行一系列的转换,例如对于一个实例、RTF格式转换成ASCII格式。而转换在一个类(如Converter类)的对象中得到处理,在诚寻执行过程中可以加入或者删除这种转换。而且当添加或者删除Converter操作时,你的程序可能需要通知其他的对象,但是这些Converter对象并不需要知道被通知对象是什么,能干什么。你只需要声明两个通知,”ConverterAdded” 和 “ConverterRemoved”,并且在某一事件发生时就发出这两个通知。

当一个用户安装或者删除一个Converter,它将发送下面的消息给通知中心:

[[NSNotificationCenter defaultCenter]
postNotificationName:@”ConverterAdded” object:self];

或者是

[[NSNotificationCenter defaultCenter]
postNotificationName:@”ConverterRemoved” object:self];

通知中心将会区分它们对象对这些通知感兴趣并且通知他们。如果除了关心观察者的通知名称和观察的对象,还关心其他之外的对象,那么就把之外的对象放在通知的可选字典中,或者用方法postNotificationName:object:userInfo:。

而采用performSelectorOnMainThread:withObject:waitUntilDone:则是直接调用NSNotification的方法postNotification,而postNotificationName和object参数可以放到withObject的实参中。例如:

[[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:notification waitUntilDone:YES];//注意这里的notification为自定义的一个通知对象,可定义为NSNotification* notification = [NSNotification notificationWithName:@”ConverterAdded”object:self];//那么它的作用与上面的一致

4.移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

注意参数notificationObserver为要删除的观察者,一定不能置为nil。

PS:这里简单说一下通知中心保存的调度表。通知中心的调度表是给一些观察者指定的一些通知集。一个通知集是通知中心发出的通知的子集。每个表的入口包含:

通知观察者(必须要的)、通知名称、通知的发送者。

下图表示通知集中指定的通知的调用表入口的四种类型:
%title插图%num

下图表示四种观察者的调度表

%title插图%num

*后,提醒一下观察者收到通知的顺序是没有定义的。同时通知发出和观察的对象有可能是一样的。通知中心同步转发通知给观察者,就是说 postNotification: 方法直到接收并处理完通知才返回值。要想异步的发送通知,可以使用NSNotificationQueue。在多线程编程中,通知一般是在一个发出通知的那个线程中转发,但也可能是不在同一个线程中转发通知。

通知 是在跳转控制器之间常用的传值代理方式,除了代理模式,通知更方便、便捷,一个简单的Demo实现通知的跳转传值.

iOS通知传值的使用
输入所要发送的信息 ,同时将label的值通过button方法调用传递,

– (IBAction)buttonClick:(id)sender {

   //添加 字典,将label的值通过key值设置传递

   NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:self.textFieldOne.text,@”textOne”,self.textFieldTwo.text,@”textTwo”,nil];

   //创建通知

   NSNotification *notification =[NSNotification notificationWithName:@”tongzhi” object:niluserInfo:dict];

   //通过通知中心发送通知

   [[NSNotificationCenter defaultCenter] postNotification:notification];

   [self.navigationController popViewControllerAnimated:YES];

}

在发送通知后,在所要接收的控制器中注册通知监听者,将通知发送的信息接收

– (void)viewDidLoad {

   [super viewDidLoad];

   //注册通知

   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tongzhi:)name:@”tongzhi” object:nil];

}

– (void)tongzhi:(NSNotification *)text{

   NSLog(@”%@”,text.userInfo[@”textOne”]);

       NSLog(@”-----接收到通知——“);

}

移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:

[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];

注意参数notificationObserver为要删除的观察者,一定不能置为nil。

IOS 启动画面和图标设置(适配IOS7 and Xcode5)

关于IOS程序设置启动画面以及图标的设备目前主要为:IPhone设备 和IPad设备

IPhone启动画面以及图标的设置

目前IPhone的分辨率为:320X480、640X960、640X1136。

Default.png                    320X480 iPhone 320X480分辨率屏幕默认启动图片。

[email protected]             640X960 iPhone 640X960分辨率屏幕默认启动图片。

[email protected]    640X1136  iPhone 640X1136分辨率屏幕默认启动图片。

————————————————————————————–

Icon.png                      57X57       10px   用户AppStore以及iPhone/iPod 中显示 必需

[email protected]              114X114   20px  高清模式

Icon_120.png             120X120   20px  用于iPhone5的高清显示

Icon-Small.png           29X29       20px  用于设置以及Spotlight搜索

[email protected]   58X58      8px     用于Icon-Small.png的高清模式

Icon_80.png  80X80      8px   用于iPhone5在Spotlight搜索

—————————————————————————————

IPad启动画面以及图标设置

Default-Portrait.png                            768X1024        iPad专用竖向启动画面

Default-Landscape.png                      768X1024        iPad专用横向启动画面

Default-PortraitUpsideDown.png        768X1024        iPad专用竖向启动画面(Home按钮在屏幕上面)

Default-LandscapeLeft.png                768X1024        iPad专用竖向启动画面(Home按钮在屏幕左面)

Default-LandscapeRight.png              768X1024        iPad专用竖向启动画面(Home按钮在屏幕右面)

——————————————————————————————–

Icon-72.png         72X72       20px       用于在iPad桌面中显示必需

Icon-50.png         50X50       20px      用于iPad中的Spotlight搜索

Icon-29.png         29X29       10px      设置页面

 

iOS开发phonegap之消息推送

一、安装插件:

1、phonegaplocal plugin add https://github.com/phonegap-build/PushPlugin.git

2、phonegap plugin add cordova-plugin-device

3、phonegap plugin add cordova-plugin-media

二、在js文件中调用

var pushNotification;

var app = {
// Application Constructor

initialize: function() {
this.bindEvents();

},

// Bind Event Listeners

//

// Bind any events that are required on startup. Common events are:

// ‘load’, ‘deviceready’, ‘offline’, and ‘online’.

bindEvents: function() {
document.addEventListener(‘deviceready’, this.onDeviceReady, false);

 

},

// deviceready Event Handler

//

// The scope of ‘this’ is the event. In order to call the ‘receivedEvent’

// function, we must explicitly call ‘app.receivedEvent(…);’

 

onDeviceReady: function() {
app.receivedEvent(‘deviceready’);

app.registerN();

 

},

// Update DOM on a Received Event

receivedEvent: function(id) {

var parentElement = document.getElementById(id);

var listeningElement = parentElement.querySelector(‘.listening’);

var receivedElement = parentElement.querySelector(‘.received’);

listeningElement.setAttribute(‘style’, ‘display:none;’);

receivedElement.setAttribute(‘style’, ‘display:block;’);

console.log(‘Received Event: ‘ + id);

},

registerN: function() {

pushNotification = window.plugins.pushNotification;

 

pushNotification.register(

this.tokenHandler,

this.errorHandler,

{
“badge”:”true”,

“sound”:”true”,

“alert”:”true”,

“ecb”:”onNotificationAPN”

});

},

onNotificationAPN: function(event) {
if ( event.alert )

{
navigator.notification.alert(event.alert);

}

 

if ( event.sound )

{
var snd = new Media(event.sound);

snd.play();

}

 

if ( event.badge )

{
pushNotification.setApplicationIconBadgeNumber(successHandler, errorHandler, event.badge);

}

},

tokenHandler: function(result) {
alert (‘success’);

alert(‘device token = ‘ + result);

},

errorHandler: function(error) {
alert(‘register erro’);

alert(‘error = ‘ + error);

}

};

iphone屏幕镜像连电视_手机如何连接电视机?

一般情况下,手机想要直接的连接到电视机上是无法实现的,但是,我们如果只是想手机上的视频投影到电视机上播放还是没有问题的。我们可以通过DLNA技术来实现这个功能。

先解释一下DLNA

2b32ed1d424805d3fc88df492f78d7b0.pngDLNA其实严格来说并不是一种技术,而是一种解决方案,全程叫“DIGITAL LIVING NETWORK ALLIANCE(数字生活网络联盟)”,是由索尼、英特尔、微软等公司发起成立的。为的就是实现PC电脑、移动设备和消费电器在无线或者有线网络中的互联互通。

不过2017年1月15日,DLNA组织已经正式解散了,不过这个技术依旧被使用着。

怎么来实现投屏呢?

首先,我们需要一个联网的路由器(*好是无线),一部智能手机(iPhone和安卓都行),一台电视机。如果电视是互联网电视,能够直接连上无线网络,那么就不需要更多设备了,如果电视没有这个功能,那么你还需要一个小小的投屏设备。

我们先假设电视是互联网电视

对于iPhone手机来说,那就很简单了,先保证手机连上了你家里的wifi,然后保证你的电视机是连上wifi的。

然后打开手机,向上滑动出功能菜单,其中就有一个叫做屏幕镜像的功能。

8e8b60c1b3aca5cad8de4bba3134c12b.png7a92b788291950ff5b9750c12e76f643.png

点击以后,就能够看到你已经联网的电视机了。这是,点击选中,OK,一切就完成了,是不是很简单。

如果是安卓手机呢?华为的手机,很多是自带了投屏功能,和iPhone一样,可以直接投屏。如果是没有自带这个功能的安卓手机,你就需要安装一个投屏APP,类似的投屏APP非常多,到应用市场里面找一个就OK了。

d5f2b5943d6ba00a96b728a88c3bd088.png

使用的话,也就是打开APP,然后选择投屏,再选择设备就OK了,也非常简单。

当然,如果你是在用爱艺奇,youku等视频APP看视频,想要投屏到电视上,一般在播放视频的时候,手机屏幕的右上角会有类似的功能按钮,就可以实现投屏了。

77604225779c7f2a05136de449bb629b.png

如果我的电视不是互联网电视,不能联网怎么办呢?

那你就需要借助外力了。一般来说,小米盒子这种互联网机顶盒都是带有投屏功能的,如果你有,可以通过投屏到这些设备上,然后在电视上播放。

如果没有机顶盒,那么就只有买一个小设备了。选择设备的时候,可以根据自己的使用目的来购买。例如:你经常看爱奇艺的视频,那么你就可以选一个电视果。

fe4a2bc491ec9730acd94914981c32d4.png

非常小的个头,还送爱奇艺会员,并且,在投屏爱奇艺的视频时,其实并不是投屏,而是通过电视果直接播放。

是不是投屏有什么区别呢?

如果是投屏,手机关闭或者断网,那么电视也就不会继续播放了,因为电视是通过连接手机来播放的。但是电视果就好像一个机顶盒,如果是播放爱奇艺的视频,其实就不需要你手机作为信号源了,电视果可以直连爱奇艺视频网站进行播放。手机关机都不会受到影响。

当然,还有什么天猫魔盒、小米盒子等等很多选择。

前期回顾:

1:都说安卓手机用一两年就卡到不行,但知道这3招,同样可以用很久

2:iPhone深深隐藏的5个秘密开关,苹果官方都求着你去开,不开血亏

3:App Store里5个热门应用,款款都是黑科技,让你的苹果好用爆表!

ios屏蔽描述文件官方下载入口_iOS屏蔽更新描述文件失效解决办法:用这个方法屏蔽iOS13更新…

相信不少苹果设备的用户都经历过这样一个场景,只是睡一觉的时间,自己手中的iPhone或者iPad自动升级到了*新iOS版本。众所周知,由于iOS系统的机制,当设备开启“自动更新”,苹果设备会在适合的网络环境下自动下载*新的系统,且在充电状态+接入WI-FI的时候,自动升级新版iOS系统。

d9e9dc4dfd68cb4e5d5799b242a715de.png

对部分用户来说,他们希望能够停留在较低版本,而iPhone的升级提醒,却让人感到心烦,一旦误操作,就无法退回到已关闭验证的较早版本。在过去,我们都是利用苹果tvOS的描述文件来屏蔽iOS升级,在iOS设备上安装tvOS描述文件就可以让系统误以为检查的是tvOS的OTA更新,因此在iOS系统上就收不到更新。随着屏蔽系统更新的tvOS 12描述文件在今年1月底失效后,至今没有可用的屏蔽升级描述文件。为了避免系统意外升级,我们可以先通过其它的“曲线救国”方式来屏蔽升级。

  • 方法:关闭“设置“的网络权限

原理:因为系统升级需要联网下载新固件,关闭“设置”的网络权限,无法接入网络,所以也就不会自动下载*新固件,避免了意外升级。

使用方法:

1. 先打开“设置-iPhone存储空间”检查新固件是否已经被下载,如果系统固件已经下载,先将其删除;

2. 前往“设置-无线局域网-使用WLAN与蜂窝移动网的应用”,在列表中找到“设置”,将其权限关闭。

3. 关闭“设置”的网络权限后,我们就不用再担心新固件自动被下载到设备上。

7dcd342491b16fa1edc7861d2b6a6185.png

优点:简单,易操作,无需安装额外的配置文件或者App。

缺点:

1. 可能影响到其它需要联网才能设置的功能。

解决办法:可在需要使用“设置”联网时,重新打开网络权限,使用完成后重复上述步骤即可。

2. “设置”图标上的提醒数字“1”不会消失。

iOS开发中怎么样使用激光推送

1.注册激光推送的账号 —-> 创建应用

2.上传推送测试和发布的p12文件  注意密码的填写

3.下载sdk并拖进工程里

4.在build setting 搜索search   把路径改一下%title插图%num

%title插图%num

然后导入必须的库

CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

配置plist文件

实现如下代码

AppDelegate.m
// 远程推送
//
// Created by  on 16/3/28.
// Copyright © 2016年 sjb. All rights reserved.
//
#import “AppDelegate.h”
#import “JPUSHService.h”

#define kJpushKey @”c171bc25d7754e085b48861b”
#define kMasterSecret (7f37465534cece94ac94c277)
static NSString *appKey = @”AppKey copied from JPush Portal application”;

static NSString *channel = @”Publish channel”;
static BOOL isProduction = FALSE;

@interface AppDelegate ()

@end

@implementation AppDelegate

– (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}

if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
}else{
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil];
}

[JPUSHService setupWithOption:launchOptions appKey:kJpushKey
channel:channel apsForProduction:isProduction];

return YES;
}

– (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

// Required
[JPUSHService registerDeviceToken:deviceToken];
}

– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

// Required,For systems with less than or equal to iOS6
[JPUSHService handleRemoteNotification:userInfo];
}

– (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

// IOS 7 Support Required
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}

– (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

//Optional
NSLog(@”did Fail To Register For Remote Notifications With Error: %@”, error);
}

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速