乐虎游戏|乐虎国际登录|欢迎你

C# 开发Chrome内核浏览器(WebKit.net)

日期:2020-03-21编辑作者:计算机资讯
 在上一篇文章中,我们讲了通过重绘的方式来创建星星评分。但是通过这种方法创建的星星个数是“死的”,用户不能通过点击来改变星星的个数。 那么今天我们就来详细讲一讲,如何动态改变星星的个数。

WebKit.net是对WebKit的.Net封装,使用它.net程序可以非常方便的集成和使用webkit作为加载网页的容器。这里介绍一下怎么用它来显示一个网页这样的一个最简单的功能。

计算机 1

计算机 2starView.gif

第一步:

下载WebKit.net 的bin文件。别小看这一步,你不一定能下载成功,原因你懂的。

WebKit.net 的主页是

直接下载0.5版本的windows bin文件地址为:

Tapestry 5.0.14近期已经发布,Tapestry社区非常兴奋,因为Tapestry离成为GA只有一步之遥了。如果你没有听说过Tapestry 5,介绍一下Tapestry 5是一个开源基于组件的web框架,对于原先的版本进行了完全的修改。一些开发者不喜欢先前的版本因为困难的学习曲线,一些开发者甚至写文章抱怨,但是T5是一个全新的架构,虽然思路和先前的版本一样。那么T5的好处是什么?为什么你应该考虑在你的项目中使用Tapestry?1。创建定制的组件非常简单和快捷计算机,考虑一下通过Taglib来创建定制组件?或者更糟糕的用JSF来创建定制组件?通过T5来创建组件简捷而充满乐趣,因为它基于最普通基本的POJO,这意味这你能够单元测试你的定制组件。下面是一个T5组件的一个例子:

首先我们创建一个基于UIView的类,就叫YYStarView吧。在YYStarView.h文件中我们写下如下代码:

第二步:

新建一个WindowsForms工程。

计算机 3

然后把下载好的webkit.net bin目录下的所有文件复制到新建工程的bin/Debug/目录下。

添加引用,通过浏览添加对“WebKitBrowser.dll”的引用。

计算机 4

public class AddChar { @Parameter(required=true) private String value; @Parameter(required=true) private int position; @Parameter(required=true) private String character; void beginRender(MarkupWriter writer){ StringBuffer sb = new StringBuffer(value); sb.insert(position, character); writer.write(sb.toString()); }}
#import <UIKit/UIKit.h>@class YYStarView;@protocol YYStarViewDelegate <NSObject>@optional// 星星百分比发生变化的代理- starView:(YYStarView *)starView scorePercentDidChange:newScorePercent;@end@interface YYStarView : UIView@property (nonatomic, assign) CGFloat scorePercent;//得分值,范围为0~1,默认1@property (nonatomic, assign) BOOL hasAnimation;//是否允许动画,默认为NO@property (nonatomic, assign) BOOL allowIncompleteStar;//评分时是否允许不是整星,默认为NO@property (nonatomic, weak) id<YYStarViewDelegate>delegate;- (instancetype)initWithFrame:frame numberOfStars:(NSInteger)numberOfStars;@end
第三步:

来写写代码了。双击Form1的窗体进入代码,写下这几行代码:

 private void Form1_Load(object sender, EventArgs e)
        {
            WebKit.WebKitBrowser browser = new WebKitBrowser();
            browser.Dock = DockStyle.Fill;
            this.Controls.Add(browser);
            browser.Navigate("http://www.lixin.me");
        }

运行看看效果:

计算机 5

然后能够在页面模板中调用:

在YYStarView.m文件中我们写下如下代码:

与IE内核的WebBrowser对比:

非常简单的三步就完成了。可是话说回来了,时下都流行一步到位的,例如使用System.Windows.Forms.WebBrowser 。

使用.Net框架自带的,调用IE内核的WebBrowser来显示网页也许更简单些,只需要在新建的工程中写下这么几行代码便可:

  private void Form1_Load(object sender, EventArgs e)
        {
            WebBrowser browser = new WebBrowser();
            browser.Dock = DockStyle.Fill;
            this.Controls.Add(browser);
            browser.Navigate("http://www.lixin.me");   
        }

运行起来的效果看起来差不多,肉眼基本只能看出字体稍微不同而已:

计算机 6

既然都差不多,那为什么还不厌其烦的去下载几个M的dll来显示网页呢?这是因为如果使用IE内核的WebBrowser我们无法预知对网页的显示效果,例如你的电脑是xp,可能会调用ie6作为加载器,如果是win7,可能会调用ie8作为加载器,而他们的显示效果是不完全一样的。下面用一个例子来看看。

 这个页面是用来测试浏览器对css3的支持程度的。现在我们分别用2个方法来显示这个页面。

 private void Form1_Load(object sender, EventArgs e)
        {
            WebBrowser browser = new WebBrowser();
            browser.Dock = DockStyle.Fill;
            browser.Navigate("http://css3.zxq.net/doraemon/doraemon_css3.html");
            splitContainer1.Panel1.Controls.Add(browser);

            WebKit.WebKitBrowser kitBrowser = new WebKitBrowser();
            kitBrowser.Dock = DockStyle.Fill;
            kitBrowser.Navigate("http://css3.zxq.net/doraemon/doraemon_css3.html");
            splitContainer1.Panel2.Controls.Add(kitBrowser);
        }

效果图如下:

计算机 7

本机的系统是win7+IE9,但是通过WebBrowser调用,估计仍然使用的是IE8内核,所以显示效果很差。

通过这样左右对比,可以看出多了一步麻烦,是有必要的。

原文地址:

t:addChar value="literal:HelloWorld" position="5" character="literal:-"/
#import "YYStarView.h"#define STAR_FRONT_NAME @"star_yellow" //点亮星星图片#define STAR_BACK_NAME @"star_gray" // 未点亮星星图片#define DEFALUT_STAR_NUMBER 5 // 默认星星个数#define ANIMATION_TIME_INTERVAL 0.2 // 动画延时@interface YYStarView ()// 前景视图@property (nonatomic, strong) UIView *foregroundStarView;// 背景视图@property (nonatomic, strong) UIView *backgroundStarView;// 星星个数@property (nonatomic, assign) NSInteger numberOfStars;@end@implementation YYStarView- (instancetype)initWithFrame:frame { // 初始化,这里我设置星星个数为5 return [self initWithFrame:frame numberOfStars:DEFALUT_STAR_NUMBER];}- (instancetype)initWithCoder:(NSCoder *)aDecoder { if (self = [super initWithCoder:aDecoder]) { _numberOfStars = DEFALUT_STAR_NUMBER; [self createDataAndUI]; } return self;}- (instancetype)initWithFrame:frame numberOfStars:(NSInteger)numberOfStars { if (self = [super initWithFrame:frame]) { _numberOfStars = numberOfStars; [self createDataAndUI]; } return self;}#pragma mark - Private Methods// 创建视图- createDataAndUI { _scorePercent = 1;//默认为1 _hasAnimation = NO;//默认为NO _allowIncompleteStar = NO;//默认为NO self.foregroundStarView = [self createStarViewWithImage:STAR_FRONT_NAME]; self.backgroundStarView = [self createStarViewWithImage:STAR_BACK_NAME]; [self addSubview:self.backgroundStarView]; [self addSubview:self.foregroundStarView]; // 添加点按手势(也可以添加拖动手势) UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(userTapRateView:)]; tapGesture.numberOfTapsRequired = 1; [self addGestureRecognizer:tapGesture];}- userTapRateView:(UITapGestureRecognizer *)gesture { CGPoint tapPoint = [gesture locationInView:self]; // 手指当前点 CGFloat offset = tapPoint.x; // 当前偏移的X值 = 手指当前的位置*(星星视图总宽度/星星个数) CGFloat realStarScore = offset / (self.bounds.size.width / self.numberOfStars); // ceilf函数:返回浮点数整数部分(舍弃小数点部分,往个位数进1)如12.234 → ceilf=13 // 这句的意思是 是否显示整星 CGFloat starScore = self.allowIncompleteStar ? realStarScore : ceilf(realStarScore); // 用手指移动的距离/星星的个数 == 点亮星星个数 self.scorePercent = starScore / self.numberOfStars;}- createStarViewWithImage:(NSString *)imageName { UIView *view = [[UIView alloc] initWithFrame:self.bounds]; view.clipsToBounds = YES; view.backgroundColor = [UIColor clearColor]; for (NSInteger i = 0; i < self.numberOfStars; i ++) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageName]]; imageView.frame = CGRectMake(i * self.bounds.size.width / self.numberOfStars, 0, self.bounds.size.width / self.numberOfStars, self.bounds.size.height); imageView.contentMode = UIViewContentModeScaleAspectFit; [view addSubview:imageView]; } return view;}- layoutSubviews { [super layoutSubviews]; __weak YYStarView *weakSelf = self; CGFloat animationTimeInterval = self.hasAnimation ? ANIMATION_TIME_INTERVAL : 0; [UIView animateWithDuration:animationTimeInterval animations:^{ weakSelf.foregroundStarView.frame = CGRectMake(0, 0, weakSelf.bounds.size.width * weakSelf.scorePercent, weakSelf.bounds.size.height); }];}#pragma mark - Get and Set Methods- setScorePercent:scroePercent { if (_scorePercent == scroePercent) { return; } // 得分范围我设置的是0~1 这个可以你自己设定 if (scroePercent < 0) { _scorePercent = 0; } else if (scroePercent > 1) { _scorePercent = 1; } else { _scorePercent = scroePercent; } // 代理方法,当星星百分比发生变化时候调用 if ([self.delegate respondsToSelector:@selector(starView:scorePercentDidChange:)]) { [self.delegate starView:self scorePercentDidChange:scroePercent]; } // 重新布局, 刷新视图 [self setNeedsLayout];}@end

或者如果你希望将它嵌入你的HTML tag,你的web设计者能够在他熟悉的HTML设计中预览它,你能这样使用:

如何使用?这个非常简单,引入头文件,简单初始化一下就好了,是不是非常简单啊?

span t:type='addChar' t:value="literal:HelloWorld" position="5" character="literal:-"/ 

本文由乐虎游戏发布于计算机资讯,转载请注明出处:C# 开发Chrome内核浏览器(WebKit.net)

关键词:

【LX豪彩】UIProgressView进程条的性格介绍

- viewDidLoad { - (void)viewDidLoad { [super viewDidLoad]; //实例化一个进度条,有两种样式,一种是UIProgressViewStyleBar一种是UIPro...

详细>>

浅谈常见的Loading进度条动效形式

在浏览网页、玩游戏、手提式有线电话机接受等气象,因为网速慢或是硬件差的关联,难免会遇上等候加载的场所,...

详细>>

iOS动漫之自定义转场动漫(push卡塔尔国

push.gif iOS7 开始苹果推出了自定义转场的 API 。从此,任何可以用 CoreAnimation实现的动画,都可以出现在两个 ViewContr...

详细>>

iOS[QuartzCore框架]CADisplayLink篇

在学习CoreAnimation的时候,发现好多地方都用到了CADisplayLink,现在就整理下自己的笔记吧,不足之处敬请指正。===...

详细>>