canvas实现百度,UI常用控件

 1 sizes = [size for size in range(0,100,5)]
 2         ols = []
 3         colors = ['red','green']
 4         cx , cy = 0,1
 5         for count in range(10):
 6             for offset in sizes:
 7                 olleft = self.mycanvas.create_oval(self.topx - 100 + offset,self.topy + offset,self.bottomx -100 - offset,self.bottomy - offset,
 8                                                 fill=colors[cx % 2],outline=colors[cx % 2],tag='display2')
 9                 olright = self.mycanvas.create_oval(self.topx + offset,self.topy + offset,self.bottomx-offset,self.bottomy - offset,
10                                                 fill=colors[cy % 2],outline=colors[cy % 2],tag='display2')
11                 ols.append(olleft)
12                 ols.append(olright)
13                 self.mycanvas.move(olleft,offset,0)
14                 self.mycanvas.move(olright,-offset,0)
15                 self.mycanvas.update()
16                 time.sleep(0.1)
17             
18             for ol in ols:
19                 self.mycanvas.delete(ol) 
20             cx += 1
21             cy += 1

添加商品和商品名小项目(使用xib文件终结版)

小贴士:博文末尾有项目源码在百度云备份的下载链接。


UI常用控件,ui控件

//创建警告框对象

UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"警告!" message:@"您确定退出吗?"  delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定",@"继续",@"查看",nil];

//显示警告框

[alertView show];

 

//需要在.h里遵守UIAlertViewDelegate协议并且实现协议里面方法

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex

{

    //通过buttonIndex参数,可以区分点击的为哪个按钮

    NSLog(@"%i",buttonIndex);

}

(2)

//创建ActionSheet对象

UIActionSheet *actionSheet=[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"删除图片" otherButtonTitle:nil,nil];

//添加到self.view上

[actionSheet showInView:self.view];

//也需要在.h文件中遵守UIActionSheetDelegate协议实现协议里面的方法

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

{

    NSLog(@"%i",buttonIndex);

}

 (3)

//创建步进器对象

UIStepper *stp=[[UIStepper alloc]initWithFrame:CGRectMake(100,100,100,0)

[self.view addSubview:stp];

//设置步进器的最大值和最小值

stp.maximumValue=10;

stp.minimumValue=0;

//设置步进器的幅度 默认为一

stp.stepValue=2;

[stp addTarget:self action:@selector(stpClick:) forControlEvents:UIControlEventValueChanged];

//创建进度条对象

//进度不能设置最大和最小值

//进度条的取值范围0~1

UIProgressView *p=[[UIProgressView alloc]initWithFrame:CGRectMake(10,150,300,10)];

p.tag=200;

[self.view addSubview:p];

//p.progress设置进度条进度

 

(4)

NSArray *[email protected][@"菜单",@"购物车",@"结账",@"单价"];

UISegmentedCotrol *seg=[[UISegmentControl alloc]initWithItems:arr];

[self.view addSubview:seg];

seg.frame=CGRectMake(100,100,200,30);

//设置默认选中的位置

seg.selectedSegmentIndex=1;

//向segment控件中添加按钮

[seg insertSegmentWithTitle:@"数量" atIndex=1 animated:YES];

//给segment控件添加事件

[seg addTarget:self action:@selector(segChange:) forControlEvents:UIControlEventValueChanged];

-(void)segChange:(UISegmentedControl*)sg

{

    NSLog(@"%i",sg.selectedSegmentIndex);;

}

 (5)

UISlider *slider=[[UISlider alloc]initWithFrame:CGRectMake(10,200,300,30)];

[self.view addSubview:slider];

//设置划条最大值

slider.maximumValue=50;

//设置划条最小值

slider.minimunValue=0;

//给 划条添加滑动事件

[slider addTarget:self action:@selector(sliderChange:) forControlEvents:UIControlEventValueChanged];

//滑动结束后调用方法

slider.continuous=NO;

//设置左右两侧的滑条颜色

slider.minimumTrackTintColor=[UIColor redColor];

slider.maxmumTrackTintColor=[UIColor blueColor];

//设置滑条左右图片

slider.maximumValueImage=[UIImage imageNamed:@"b.png"];

slider.minimumValueImage=[UIImage imageNamed:@"a.png"];

-(void)sliderChange:(UISlider *)s

{

    NSLog(@"%f",s.value);

}

 

(6)

//创建开关控件对象

UISwitch *sw=[[UISwitch alloc]initWithFrame:CGRectMake(100,100,0,0);

[self.view addSubview:sw];

//设置开关处于开的状态

[sw setOn:YES];

[sw addTarget:self action:@selector(swChange:) forControlEvents:UIControlEventValueChanged];

 

//创建UIActivityIndicatorView对象,用于网络加载

UIActivityIndicatorView *act=[[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];

act.frame=CGRectMake(100,150,100,100);

[self.view addSubview:act];

act.tag=100;

//开始加载

[act startAnimating];

 

 

-(void)swChange:(UISwitch*)sw

{

    

    UIActivityIndicatorView *act=(UIActivityIndicatorView *)[self.view viewWithTag:100];

  

    if (sw.isOn) {

        [act startAnimating];

        NSLog(@"on");

    }

    else

    {

        //停止加载

        [act stopAnimating];

        NSLog(@"off");

    }

    

    

}

 (7)

//创建网页加载控件对象

UIWebView *webView=[[UIWebView alloc]initWithFrame:CGRectMake(20,90,220,220)];

webView.backgroundColor=[UIColor redColor];

[self.view addSubview:webView];

webView.tag=200;

 

 

-(void)btnClick:(UIButton *)bt

{
//获得文本框对象

UITextField *textField=(UITextField *)[self.view viewWithTag:100];

//获得文本框中的网址

NSString *strURL=textField.text;

//获得webView对象

UIWebView *webView=(UIWebView *)[self.view viewWithTag:200];

NSURL *url=[NSURL URLWithString:strURL];

//封装网络请求类

NSURLRequest *request=[[NSURLRequest alloc]initWithURL:url];

//加载网络请求

[webView loadRequest:request];

}

 

//创建警告框对象 UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"警告!" message:@"您确定退出吗?" delegate:self cancelButtonTit...

添加控件后,记得加上,如此才能有显示

02-xib和storyboard对比:

  • 共同点:
    • 都用来描述软件界面
    • 都用Interface Builder工具来编辑
    • 本质都是转换成代码去创建控件
  • 不同点
    • xib是轻量级的,用来描述局部的UI界面
    • storyboard是重量级的,用来描述整个软件的多个界面,并且能展示多个界面之间的跳转关系
1 from tkinter import *
2 import time

xib相关知识点总结


对于抖音的加载框的实现:由于抖音刷的太快..我也没看太清楚呢,就先实现成这样..  :有造轮子的大佬可以互相探讨一下

05-xib的注意点

图片 1

图片 2

 

图片 3

 

(添加商品和商品名)项目备份百度云链接: 密码:rbsx

 

 

 

 

 

全部代码:

03-拖线来引用子控件

使用xib总结步骤:

新建xib文件,设置好控件
新建两个继承UIView的类,类名假设为MyUIView
然后将xib文件的类型设置为MyUIView
然后为MyUIView添加模型对象的属性,并为这个属性写好set方法
托线,把xib的控件连接到MyUIView上,最好拖放在类扩展里。

有PPT的话,可以直接拿来做笔记

主要添加控件的逻辑是:

图片 4

图片 5

图片 6

图片 7

图片 8

图片 9

图片 10

图片 11

导包:

01-基本使用

一开始使用xib的时候,如果要使用自定义view的代码,就需要将xib的class设置为那个view的类型,然后我觉得就可以直接使用了,其实不是这样的,还需要代码加载nib文件,并且最后返回数组对象才能使用哦。

关于XIb就看截图ppt 外加截图代码 可以用在自定义控件上

加载xib文件的过程

xib文件 -编译xib成功-> nib文件

加载nib文件的第一种方式

NSArray* array  = [[[NSBundle mainBundle]
 loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject]

加载nib文件的第二种方式

UINib* nib = [UINib nibWithNibName:@"Test" bundle:[NSBundle mainBundle]];
NSArray* array = [nib instantiateWithOwner:nil options:nil];

在第二种方式中bundle:后面的参数可以为nil,如果为nil,默认也是会加载NSBundle的mainBundle方法返回的值。

返回的是数组对象,因为加载xib获取的控件可能是多个,所以默认返回的是存储这些多个控件的数组对象

今天利用tkinter实现一下百度,抖音的加载- - 又是造轮子,首先看一下实现的效果图图片 12

04-xib的加载原理

xib的加载过程

加载xib文件 首先解析xib文件的根节点,并通过class设置创建对应的对象 然后解析属性尺寸中的尺寸设置frame ...等等相关属性的设置... 遇到子控件,同样创建子控件,并设置属性,最后被add到父控件

对于xib文件中,如果层级关系是:

  • UIView 可以通过设置class绑定到自定义的类文件
    • UILabel 子控件也可以通过设置class绑定到自定义的类文件
    • UIImageView 最后xib的整个组合控件各个部分都可以自定义

 伪代码:

1 -(void)loadXib
2 {
3     父控件类名* 父控件别名 = [[父控件类名 alloc] init];
4     父控件别名.frame = CGRectMake(0,0,70,90);
5 
6     子控件类名* 子控件别名 = [[子控件类名 alloc] init];
7     ......
8 }

xib的加载过程

1、解析底层的父控件Class,确定类型之后通过这个类型alloc+init创建对象
2、通过xib对应的attribute设置属性,进行属性赋值,比如 别名.frame = frame值
3、接着有子控件的话,就像创建父控件一样创建子控件,包括设置好相关属性,最后添加进父控件。

1.实现思路: 三个圆交替,查找API,看到特别有用的move,update---->get~

 

对于百度的加载框的实现:

 1 from tkinter import *
 2 import time
 3 
 4 class wait_:
 5     def __init__(self):
 6         master = Tk()
 7         master.title('this is a waitpic Demo')
 8         title = Label(master, text='请选择等待图案',font='15',bg='yellow',fg='grey')
 9         title.pack(fill=X)
10 
11         self.canvaswidth = 1000
12         self.canvasheight = 600
13         self.centerx = self.canvaswidth // 2
14         self.centery = self.canvasheight // 2
15         self.topx = self.centerx - 50
16         self.topy = self.centery -50
17         self.bottomx = self.centerx + 50
18         self.bottomy = self.centery + 50
19         self.mycanvas = Canvas(master, width=self.canvaswidth,height=self.canvasheight, bg='White')
20         self.mycanvas.pack() 
21         self.mycanvas.create_text(100,20,text='happy life exeryday')
22 
23         bt1 = Button(master,text='图案1',command=self.display1)
24         bt2 = Button(master,text='图案2',command=self.display2)
25         btclear = Button(master,text='清空',command=self.clearCanvas)
26         bt1.pack(side=LEFT)
27         bt2.pack(side=LEFT)
28         btclear.pack(side=RIGHT)
29 
30         master.mainloop()
31 
32     def display1(self):
33         olred = self.mycanvas.create_oval(self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='red')
34         olyellow = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='yellow')
35         olgreen = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx , self.bottomy, tag='diaplay1', fill='green')
36         ols = [olred, olyellow, olgreen]
37         movingx , movingy = 0, 1
38         for count in range(4):
39             for i in range(100):
40                 self.mycanvas.move(ols[movingx % 3],-2, 0)
41                 self.mycanvas.move(ols[movingy % 3],+2, 0)
42                 self.mycanvas.update()
43                 time.sleep(0.01)
44             for j in range(100):
45                 self.mycanvas.move(ols[movingx % 3],+2,0)
46                 self.mycanvas.move(ols[movingy % 3],-2,0)
47                 self.mycanvas.update()
48                 time.sleep(0.01)
49             movingx += 1
50             movingy += 1
51 
52     def display2(self):
53         sizes = [size for size in range(0,100,5)]
54         ols = []
55         colors = ['red','green']
56         cx , cy = 0,1
57         for count in range(10):
58             for offset in sizes:
59                 olleft = self.mycanvas.create_oval(self.topx - 100 + offset,self.topy + offset,self.bottomx -100 - offset,self.bottomy - offset,
60                                                 fill=colors[cx % 2],outline=colors[cx % 2],tag='display2')
61                 olright = self.mycanvas.create_oval(self.topx + offset,self.topy + offset,self.bottomx-offset,self.bottomy - offset,
62                                                 fill=colors[cy % 2],outline=colors[cy % 2],tag='display2')
63                 ols.append(olleft)
64                 ols.append(olright)
65                 self.mycanvas.move(olleft,offset,0)
66                 self.mycanvas.move(olright,-offset,0)
67                 self.mycanvas.update()
68                 time.sleep(0.1)
69             
70             for ol in ols:
71                 self.mycanvas.delete(ol) 
72             cx += 1
73             cy += 1
74     
75     def clearCanvas(self):
76         self.mycanvas.delete('display1','display2')
77 
78 wait_()

需要注意的是tkinter中的t必须是小写字母

2.对于控件 :   控件x(tk/frame,**kwargs)

3.对控件进行布局,参见一开始给的博客

 1         olred = self.mycanvas.create_oval(self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='red')
 2         olyellow = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx, self.bottomy, tag='display1', fill='yellow')
 3         olgreen = self.mycanvas.create_oval( self.topx, self.topy, self.bottomx , self.bottomy, tag='diaplay1', fill='green')
 4         ols = [olred, olyellow, olgreen]
 5         movingx , movingy = 0, 1
 6         for count in range(4):
 7             for i in range(100):
 8                 self.mycanvas.move(ols[movingx % 3],-2, 0)
 9                 self.mycanvas.move(ols[movingy % 3],+2, 0)
10                 self.mycanvas.update()
11                 time.sleep(0.01)
12             for j in range(100):
13                 self.mycanvas.move(ols[movingx % 3],+2,0)
14                 self.mycanvas.move(ols[movingy % 3],-2,0)
15                 self.mycanvas.update()
16                 time.sleep(0.01)
17             movingx += 1
18             movingy += 1

这个已经比较全面了

主要控件及自变量:

对于tkinter的各个控件,可以参看  :

 1      master = Tk()
 2         master.title('this is a waitpic Demo')
 3         title = Label(master, text='请选择等待图案',font='15',bg='yellow',fg='grey')
 4         title.pack(fill=X)
 5 
 6         self.canvaswidth = 1000
 7         self.canvasheight = 600
 8         self.centerx = self.canvaswidth // 2
 9         self.centery = self.canvasheight // 2
10         self.topx = self.centerx - 50
11         self.topy = self.centery -50
12         self.bottomx = self.centerx + 50
13         self.bottomy = self.centery + 50
14         self.mycanvas = Canvas(master, width=self.canvaswidth,height=self.canvasheight, bg='White')
15         self.mycanvas.pack() 
16         self.mycanvas.create_text(100,20,text='happy life exeryday')
17 
18         bt1 = Button(master,text='图案1',command=self.display1)
19         bt2 = Button(master,text='图案2',command=self.display2)
20         btclear = Button(master,text='清空',command=self.clearCanvas)
21         bt1.pack(side=LEFT)
22         bt2.pack(side=LEFT)
23         btclear.pack(side=RIGHT)

1.声明一个Tk()对象,或者是frame对象

master.mainloop()

本文由澳门威斯尼人平台登录发布于计算机编程,转载请注明出处:canvas实现百度,UI常用控件

相关阅读