首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

iOS开发之UIWebView

UIWebView是iOS sdk中一个最常用的控件。是内置的浏览器控件,我们可以用它来浏览网页、打开文档等等。这篇文章我将使用这个控件,做一个简易的浏览器。如下图: 我们创建一个Window-based Application程序命名为:UIWebViewDemo UIWebView的loadRequest可以用来加载一个url地址,它需要一个NSURLRequest参数。我们定义一个方法用来加载url。在UIWebViewDemoViewController中定义下面方法: - (void)loadWebPageWithString:(NSString*)urlString { NSURL *url =[NSURL URLWithString:urlString]; NSLog(urlString); NSURLRequest *request =[NSURLRequest requestWithURL:url]; [webView loadRequest:request]; } 在界面上放置3个控件,一个textfield、一个button、一个uiwebview,布局如下: 在代码中定义相关的控件:webView用于展示网页、textField用于地址栏、activityIndicatorView用于加载的动画、buttonPress用于按钮的点击事件。 @interface UIWebViewDemoViewController :UIViewController<UIWebViewDelegate> { IBOutlet UIWebView *webView; IBOutlet UITextField *textField; UIActivityIndicatorView *activityIndicatorView; } - ( IBAction )buttonPress:( id ) sender; - ( void )loadWebPageWithString:( NSString *)urlString; @end 使用IB关联他们。 设置UIWebView,初始化UIActivityIndicatorView: - (void)viewDidLoad { [super viewDidLoad]; webView.scalesPageToFit =YES; webView.delegate=self; activityIndicatorView = [[UIActivityIndicatorView alloc] initWithFrame : CGRectMake(0.0f, 0.0f, 32.0f, 32.0f)] ; [activityIndicatorView setCenter: self.view.center] ; [activityIndicatorView setActivityIndicatorViewStyle: UIActivityIndicatorViewStyleWhite] ; [self.view addSubview : activityIndicatorView] ; [self buttonPress:nil];// Do any additional setup after loading the view from its nib.} UIWebView主要有下面几个委托方法: 1、- (void)webViewDidStartLoad:(UIWebView *)webView;开始加载的时候执行该方法。 2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加载完成的时候执行该方法。 3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加载出错的时候执行该方法。 我们可以将activityIndicatorView放置到前面两个委托方法中。 - (void)webViewDidStartLoad:(UIWebView *)webView { [activityIndicatorView startAnimating] ; }- (void)webViewDidFinishLoad:(UIWebView *)webView { [activityIndicatorView stopAnimating]; } buttonPress方法很简单,调用我们开始定义好的loadWebPageWithString方法就行了: - ( IBAction )buttonPress:( id ) sender { [textField resignFirstResponder]; [ self loadWebPageWithString:textField.text]; } 当请求页面出现错误的时候,我们给予提示: - ( void )webView:(UIWebView *)webView didFailLoadWithError:( NSError *)error { UIAlertView *alterview = [[UIAlertView alloc] initWithTitle:@ "" message:[error localizedDescription] delegate: nil cancelButtonTitle: nil otherButtonTitles:@ "OK" , nil ]; [alterview show]; [alterview release]; } 总结:本文通过实现一个简单的浏览器,说明了uiwebview的方法和属性,相信通过这个例子,应该明白uiwebview的使用了。 代码:UIWebViewDemo.zip 本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2011/07/28/2119923.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android应用开发—AsyncTask

摘录自 Android 多线程—–AsyncTask详解 AsyncTask AsyncTask:异步任务,从字面上来说,就是在我们的UI主线程运行的时候,异步的完成一些操作。AsyncTask允许我们的执行一个异步的任务在后台。我们可以将耗时的操作放在异步任务当中来执行,并随时将任务执行的结果返回给我们的UI线程来更新我们的UI控件。通过AsyncTask我们可以轻松的解决多线程之间的通信问题。 怎么来理解AsyncTask呢?通俗一点来说,AsyncTask就相当于Android给我们提供了一个多线程编程的一个框架,其介于Thread和Handler之间,我们如果要定义一个AsyncTask,就需要定义一个类来继承AsyncTask这个抽象类,并实现其唯一的一个 doInBackgroud 抽象方法。要掌握AsyncTask,我们就必须要一个概念,总结起来就是: 3个泛型,4个步骤。 3个泛型指的是什么呢?我们来看看AsyncTask这个抽象类的定义,当我们定义一个类来继承AsyncTask这个类的时候,我们需要为其指定3个泛型参数: AsyncTask <Params, Progress, Result> Params: 这个泛型指定的是我们传递给异步任务执行时的参数的类型 Progress: 这个泛型指定的是我们的异步任务在执行的时候将执行的进度返回给UI线程的参数的类型 Result: 这个泛型指定的异步任务执行完后返回给UI线程的结果的类型 我们在定义一个类继承AsyncTask类的时候,必须要指定好这三个泛型的类型,如果都不指定的话,则都将其写成Void, 例如: AsyncTask <Void, Void, Void> 4个步骤:当我们执行一个异步任务的时候,其需要按照下面的4个步骤分别执行 onPreExecute(): 这个方法是在执行异步任务之前的时候执行,并且是在UI Thread当中执行的,通常我们在这个方法里做一些UI控件的初始化的操作,例如弹出要给ProgressDialog doInBackground(Params… params): 在onPreExecute()方法执行完之后,会马上执行这个方法,这个方法就是来处理异步任务的方法,Android操作系统会在后台的线程池当中开启一个worker thread来执行我们的这个方法,所以这个方法是在worker thread当中执行的,这个方法执行完之后就可以将我们的执行结果发送给我们的最后一个 onPostExecute 方法,在这个方法里,我们可以从网络当中获取数据等一些耗时的操作 onProgressUpdate(Progess… values): 这个方法也是在UI Thread当中执行的,我们在异步任务执行的时候,有时候需要将执行的进度返回给我们的UI界面,例如下载一张网络图片,我们需要时刻显示其下载的进度,就可以使用这个方法来更新我们的进度。这个方法在调用之前,我们需要在 doInBackground 方法中调用一个 publishProgress(Progress) 的方法来将我们的进度时时刻刻传递给 onProgressUpdate 方法来更新 onPostExecute(Result… result): 当我们的异步任务执行完之后,就会将结果返回给这个方法,这个方法也是在UI Thread当中调用的,我们可以将返回的结果显示在UI控件上 为什么我们的AsyncTask抽象类只有一个 doInBackground 的抽象方法呢??原因是,我们如果要做一个异步任务,我们必须要为其开辟一个新的Thread,让其完成一些操作,而在完成这个异步任务时,我可能并不需要弹出要给ProgressDialog,我并不需要随时更新我的ProgressDialog的进度条,我也并不需要将结果更新给我们的UI界面,所以除了 doInBackground 方法之外的三个方法,都不是必须有的,因此我们必须要实现的方法是 doInBackground 方法。

优秀的个人博客,低调大师

Redis 开发

1.8.1.消息订阅与发布 订阅 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $channel = $argv[1]; // channel $redis->subscribe(array('channel'.$channel), 'callback'); function callback($instance, $channelName, $message) { echo $channelName, "==>", $message,PHP_EOL; } 发布 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $channel = $argv[1]; // channel $msg = $argv[2]; // msg $redis->publish('channel'.$channel, $msg); 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

优秀的个人博客,低调大师

Redis 开发

32.8.1.消息订阅与发布 订阅 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $channel = $argv[1]; // channel $redis->subscribe(array('channel'.$channel), 'callback'); function callback($instance, $channelName, $message) { echo $channelName, "==>", $message,PHP_EOL; } 发布 <?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); $channel = $argv[1]; // channel $msg = $argv[2]; // msg $redis->publish('channel'.$channel, $msg); 原文出处:Netkiller 系列 手札 本文作者:陈景峯 转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。

优秀的个人博客,低调大师

Android开发之WebView

感觉在显示信息时,用途还可以的。 只是不知和React Native的应用场合有何分别? package com.tw.flag.ch13_hellowebview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; public class MainActivity extends AppCompatActivity { WebView wv; ProgressBar pb; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wv = (WebView) findViewById(R.id.wv); pb = (ProgressBar)findViewById(R.id.pb); wv.getSettings().setJavaScriptEnabled(true); wv.getSettings().setBuiltInZoomControls(true); wv.invokeZoomPicker(); wv.setWebViewClient(new WebViewClient()); wv.setWebChromeClient(new WebChromeClient(){ public void onProgressChanged(WebView view, int progress) { pb.setProgress(progress); pb.setVisibility(progress < 100 ? View.VISIBLE: View.GONE); } }); wv.loadUrl("https://m.jd.com"); } @Override public void onBackPressed() { if (wv.canGoBack()) { wv.goBack(); return; } super.onBackPressed(); } }

优秀的个人博客,低调大师

NDK开发环境配置

1,新建项目添加C++支持,让Android Studio自动生成相关的配置文件 2,设置生成的.SO库名和相应的平台库 在配置build.gradle文件中,这里的build.gradle是指app模块下的build.gradle,不是整个工程的build.gradle文件。在模块的build.gradle的defaultConfig下加入以下ndk配置: ndk { moduleName" .so库的名字 " ldLibs "log", "z", "m" abiFilters "armeabi", "armeabi-v7a", "x86" } 3,CMakeLists.txt的内容如下 cmake_minimum_required(VERSION 3.4.1) add_library( native-lib //你的.so库名称 SHARED src/main/cpp/native-lib.c //项目中要用到的.c和.cpp文件 ) target_link_libraries(native-lib log android) 4,配置gradle.properties android.useDeprecatedNdk=true 这一句是允许我们在项目中使用过时的NDK版本

优秀的个人博客,低调大师

iOS开发-音乐播放

现在的各种App大行其道,其实常用也就是围绕着吃喝玩乐基本的需求,视频,音乐在智能手机出现之前更是必不可少的功能,每个手机都会有一个自带的音乐播放器,当然公众也有自己的需求所以也就造就了各种音乐播放软件,自己下午闲来无事简单的写了一个随机播放音乐的Demo,iOS中有三种播放音频的方式AVAudioPlayer、音频服务、音频队列。另外两种暂时没有用到,就简单的练手了一下AVAudioPlayer,还是开始正题吧; 1.新建项目或者在原有项目重新弄一个页面,先看页面: 2.导入几首自己喜欢的歌曲: 3.导入AVFoundation/AVFoundation.h,对四个按钮进行事件操作,一个AVAudioPlayer只能对应一个URL,因此播放其他歌曲的时候需要情况一下; 定义两个成员变量,并且初始化成员变量: 1 2 3 4 @interface MusicViewController () @property ( nonatomic ,strong)AVAudioPlayer *player; @property ( nonatomic ,strong) NSArray *musicArr; @end viewDidLoad实例化数组: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 - ( void )viewDidLoad { [ super viewDidLoad]; // Do any additional setup after loading the view. self .musicArr=@[@ "潮湿的心.mp3" ,@ "爱拼才会赢.mp3" ,@ "给我一个理由忘记.mp3" ]; [ self prepareMusic: self .musicArr[1]]; } - ( void )prepareMusic:( NSString *)path{ //1.音频文件的url路径 NSURL *url=[[ NSBundle mainBundle]URLForResource:path withExtension:Nil]; //2.实例化播放器 _player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; //3.缓冲 [_player prepareToPlay]; } 4.四个对应事件的代码: 随机: 1 2 3 4 - ( IBAction )random:( id )sender { [ self prepareMusic: self .musicArr[arc4random()%3]]; [_player play]; } 播放: 1 2 3 4 - ( IBAction )play:( id )sender { //播放 [_player play]; } 暂停: 1 2 3 4 - ( IBAction )pause:( id )sender { //暂停 [_player pause]; } 停止: 1 2 3 4 - ( IBAction )stop:( id )sender { //停止 [_player stop]; } 5.设置循环次数,开始播放时间,设置音量 1 2 3 4 5 6 //设置音量 [_player setVolume:0.6]; //设置当前播放事件 [_player setCurrentTime:60]; //设置循环次数 [_player setNumberOfLoops:2]; MusicViewController.m中的代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 // // MusicViewController.m // MyPicture // // Created by keso on 15/1/17. // Copyright (c) 2015年 keso. All rights reserved. // #import "MusicViewController.h" #import <AVFoundation/AVFoundation.h> @interface MusicViewController () @property ( nonatomic ,strong)AVAudioPlayer *player; @property ( nonatomic ,strong) NSArray *musicArr; @end @implementation MusicViewController - ( void )viewDidLoad { [ super viewDidLoad]; // Do any additional setup after loading the view. self .musicArr=@[@ "潮湿的心.mp3" ,@ "爱拼才会赢.mp3" ,@ "给我一个理由忘记.mp3" ]; [ self prepareMusic: self .musicArr[1]]; } - ( void )prepareMusic:( NSString *)path{ //1.音频文件的url路径 NSURL *url=[[ NSBundle mainBundle]URLForResource:path withExtension:Nil]; //2.实例化播放器 _player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:Nil]; //3.缓冲 [_player prepareToPlay]; //设置音量 [_player setVolume:0.6]; //设置当前播放事件 [_player setCurrentTime:60]; //设置循环次数 [_player setNumberOfLoops:2]; } - ( IBAction )random:( id )sender { [ self prepareMusic: self .musicArr[arc4random()%3]]; [_player play]; } - ( IBAction )play:( id )sender { //播放 [_player play]; } - ( IBAction )stop:( id )sender { //停止 [_player stop]; } - ( IBAction )pause:( id )sender { //暂停 [_player pause]; } - ( void )didReceiveMemoryWarning { [ super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end 其实需要设置还有很多,播放出现异常,或者被更高级别的系统任务打断,可以通过设置相应的委托处理对应的的情形,Demo很小,iOS很多东西都是这样,概念很多,调用的时候根本都不需要写几行代码,iOS的模拟器播放的效果还是非常出色的~ 由于是播放音乐,无法模拟效果,大概试验一下,应该没有什么问题~ 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4231307.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

iOS开发-DatePicker控件

时间控件不管是Android还是iOS中都是必然存在的一个控件,具体的效果大同小异,显示日期,时间,iOS中有四种方式可以选择,Time, Date,Date and Time , Count Down Timer,Demo比较简单,需要一个DatePicker控件和一个Button显示时间或者日期,具体实现如下: 页面布局 Main.storyboard布局: Y 效果: 代码实现 首先将控件拖入ViewController.h中,将Button的点击拖入ViewController.m中: 1 2 3 4 5 6 7 8 9 10 11 12 - ( IBAction )showDate:( id )sender { //日期选择时候的时间 NSDate *currentDate = [_currentDatePicker date]; NSDateFormatter *myFormatter = [[ NSDateFormatter alloc] init]; //显示的日期格式 // [myFormatter setDateFormat:@"yy-MM-dd HH:mm:ss"]; //2015 [myFormatter setDateFormat:@ "yyyy年MM月dd日" ]; NSString *time = [myFormatter stringFromDate:currentDate]; UIAlertView *alterView=[[UIAlertView alloc] initWithTitle:@ "当前时间" message:time delegate: self cancelButtonTitle:@ "确定" otherButtonTitles: nil , nil ]; [alterView show]; } 最终的效果如下: DatePicker的Mode我选择的是Time模式,大家可以根据需要自己选择,默认的时显示英文的,如果DatePicker需要切换中英文那么可以选择Locale选择中文: 本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4225398.html,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册