lingyifang4

Xstudio工作室隐私政策

Xstudio工作室尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,Xstudio工作室会按照本隐私权政策的规定使用和披露您的个人信息。但Xstudio工作室将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,Xstudio工作室不会将这些信息对外披露或向第三方提供。Xstudio工作室会不时更新本隐私权政策。 您在同意Xstudio工作室服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于Xstudio工作室服务使用协议不可分割的一部分。 

1. 适用范围 

a) 在您注册Xstudio工作室帐号时,您根据Xstudio工作室要求提供的个人注册信息; 

b) 在您使用Xstudio工作室网络服务,或访问Xstudio工作室平台网页时,Xstudio工作室自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据; 

c) Xstudio工作室通过合法途径从商业伙伴处取得的用户个人数据。 

您了解并同意,以下信息不适用本隐私权政策: 

a) 您在使用Xstudio工作室平台提供的搜索服务时输入的关键字信息; 

b) Xstudio工作室收集到的您在Xstudio工作室发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情; 

c) 违反法律规定或违反Xstudio工作室规则行为及Xstudio工作室已对您采取的措施。 

2. 信息使用 

a) Xstudio工作室不会向任何无关第三方提供、出售、出租、分享或交易您的个人信息,除非事先得到您的许可,或该第三方和Xstudio工作室(含Xstudio工作室关联公司)单独或共同为您提供服务,且在该服务结束后,其将被禁止访问包括其以前能够访问的所有这些资料。 

b) Xstudio工作室亦不允许任何第三方以任何手段收集、编辑、出售或者无偿传播您的个人信息。任何Xstudio工作室平台用户如从事上述活动,一经发现,Xstudio工作室有权立即终止与该用户的服务协议。 

c) 为服务用户的目的,Xstudio工作室可能通过使用您的个人信息,向您提供您感兴趣的信息,包括但不限于向您发出产品和服务信息,或者与Xstudio工作室合作伙伴共享信息以便他们向您发送有关其产品和服务的信息(后者需要您的事先同意)。 

3. 信息披露 

在如下情况下,Xstudio工作室将依据您的个人意愿或法律的规定全部或部分的披露您的个人信息: 

a) 经您事先同意,向第三方披露; 

b) 为提供您所要求的产品和服务,而必须和第三方分享您的个人信息; 

c) 根据法律的有关规定,或者行政或司法机构的要求,向第三方或者行政、司法机构披露;

d) 如您出现违反中国有关法律、法规或者Xstudio工作室服务协议或相关规则的情况,需要向第三方披露;  

e) 如您是适格的知识产权投诉人并已提起投诉,应被投诉人要求,向被投诉人披露,以便双方处理可能的权利纠纷;

f) 在Xstudio工作室平台上创建的某一交易中,如交易任何一方履行或部分履行了交易义务并提出信息披露请求的,Xstudio工作室有权决定向该用户提供其交易对方的联络方式等必要信息,以促成交易的完成或纠纷的解决。  

g) 其它Xstudio工作室根据法律、法规或者网站政策认为合适的披露。  

4. 信息存储和交换  

Xstudio工作室收集的有关您的信息和资料将保存在Xstudio工作室及(或)其关联公司的服务器上,这些信息和资料可能传送至您所在国家、地区或Xstudio工作室收集信息和资料所在地的境外并在境外被访问、存储和展示。 

5. Cookie的使用 

a) 在您未拒绝接受cookies的情况下,Xstudio工作室会在您的计算机上设定或取用cookies

,以便您能登录或使用依赖于cookies的Xstudio工作室平台服务或功能。Xstudio工作室使用cookies可为您提供更加周到的个性化服务,包括推广服务。  b) 您有权选择接受或拒绝接受cookies。您可以通过修改浏览器设置的方式拒绝接受cookies。但如果您选择拒绝接受cookies,则您可能无法登录或使用依赖于cookies的Xstudio工作室网络服务或功能。 

c) 通过Xstudio工作室所设cookies所取得的有关信息,将适用本政策。  

6. 信息安全  

a) Xstudio工作室帐号均有安全保护功能,请妥善保管您的用户名及密码信息。Xstudio工作室将通过对用户密码进行加密等安全措施确保您的信息不丢失,不被滥用和变造。尽管有前述安全措施,但同时也请您注意在信息网络上不存在“完善的安全措施”。  

b) 在使用Xstudio工作室网络服务进行网上交易时,您不可避免的要向交易对方或潜在的交易对方披露自己的个人信息,如联络方式或者邮政地址。请您妥善保护自己的个人信息,仅在必要的情形下向他人提供。如您发现自己的个人信息泄密,尤其是Xstudio工作室用户名及密码发生泄露,请您立即联络Xstudio工作室客服,以便Xstudio工作室采取相应措施。


C#集合类(Array、Arraylist、List、Hashtable、Dictionary、St

我们用的比较多的非泛型集合类主要有 ArrayList类 和 HashTable类。我们经常用HashTable 来存储将要写入到数据库或者返回的信息,在这之间要不断的进行类型的转化,增加了系统装箱和拆箱的负担,14:31:45,例如我们需要在电子商务网站中存储用户的购物车信息(商品名,对应的商品个数)时,完全可以用 Dictionary<string, int> 来存储购物车信息,而不需要任何的类型转化。

 

1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,

但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的

2.数组要声明元素的类型,集合类的元素类型却是object.

3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。

4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。

很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!

 

1.       数组

int[] intArray1;

//初始化已声明的一维数组

intArray1 = new int[3];

intArray1 = new int[3]{1,2,3};

intArray1 = new int[]{1,2,3};

 

2.       ArrayList类对象被设计成为一个动态数组类型,其容量会随着需要而适当的扩充

方法

1:Add()向数组中添加一个元素,

2:Remove()删除数组中的一个元素

3:RemoveAt(int i)删除数组中索引值为i的元素

4:Reverse()反转数组的元素

5:Sort()以从小到大的顺序排列数组的元素

6:Clone()复制一个数组

using System;

using System.Collections.Generic;

using System.Text;

using System.Collections;

namespace ConsoleApplication1

 {

     class Program

      {

         static void Main(string[] args)

          {

             ArrayList al = new ArrayList();

             al.Add(100);//单个添加

              foreach (int number in new int[6] { 9, 3, 7, 2, 4, 8 })

              {

                 al.Add(number);//集体添加方法一//清清月儿

             }

              int[] number2 = new int[2] { 11,12 };

             al.AddRange(number2);//集体添加方法二

             al.Remove(3);//移除值为3的

             al.RemoveAt(3);//移除第3个

             ArrayList al2 = new ArrayList(al.GetRange(1, 3));//新ArrayList只取旧ArrayList一部份

 

 

             Console.WriteLine("遍历方法一:");

             foreach (int i in al)//不要强制转换

              {

                 Console.WriteLine(i);//遍历方法一

             }

 

             Console.WriteLine("遍历方法二:");

             for (int i = 0; i != al2.Count; i++)//数组是length

              {

                 int number = (int)al2[i];//一定要强制转换

                 Console.WriteLine(number);//遍历方法二

 

             }

         }

     }

 }

 

3.       List

可通过索引访问的对象的强类型列表。提供用于对列表进行搜索、排序和操作的方法,在决定使用 List 还是使用 ArrayList类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。

//声明一个List对象,只加入string参数

List<string> names = new List<string>();

names.Add("乔峰");

names.Add("欧阳峰");

names.Add("马蜂");

//遍历List

foreach (string name in names)

{

Console.WriteLine(name);

}

//向List中插入元素

names.Insert(2, "张三峰");

//移除指定元素

names.Remove("马蜂");

 

4.       Dictionary

表示键和值的集合。Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同

Dictionary<string, string> myDic = new Dictionary<string, string>();

     myDic.Add("aaa", "111");

     myDic.Add("bbb", "222");

     myDic.Add("ccc", "333");

     myDic.Add("ddd", "444");

     //如果添加已经存在的键,add方法会抛出异常

     try

       {

         myDic.Add("ddd","ddd");

     }

     catch (ArgumentException ex)

       {

         Console.WriteLine("此键已经存在:" + ex.Message);

     }

     //解决add()异常的方法是用ContainsKey()方法来判断键是否存在

     if (!myDic.ContainsKey("ddd"))

       {

         myDic.Add("ddd", "ddd");

     }

     else

       {

         Console.WriteLine("此键已经存在:");

    

     }

    

     //而使用索引器来负值时,如果建已经存在,就会修改已有的键的键值,而不会抛出异常

     myDic ["ddd"]="ddd";

     myDic["eee"] = "555";

    

     //使用索引器来取值时,如果键不存在就会引发异常

     try

       {

         Console.WriteLine("不存在的键""fff""的键值为:" + myDic["fff"]);

     }

     catch (KeyNotFoundException ex)

       {

         Console.WriteLine("没有找到键引发异常:" + ex.Message);

     }

     //解决上面的异常的方法是使用ContarnsKey() 来判断时候存在键,如果经常要取健值得化最好用 TryGetValue方法来获取集合中的对应键值

     string value = "";

     if (myDic.TryGetValue("fff", out value))

       {

         Console.WriteLine("不存在的键""fff""的键值为:" + value );

     }

     else

       {    

         Console.WriteLine("没有找到对应键的键值");

     }

    

     //下面用foreach 来遍历键值对

     //泛型结构体 用来存储健值对

     foreach (KeyValuePair<string, string> kvp in myDic)

       {

         Console.WriteLine("key={0},value={1}", kvp.Key, kvp.Value);

     }

     //获取值得集合

     foreach (string s in myDic.Values)

       {

         Console.WriteLine("value={0}", s);

     }

     //获取值得另一种方式

     Dictionary<string, string>.ValueCollection values = myDic.Values;

     foreach (string s in values)

       {

         Console.WriteLine("value={0}", s);

     }

 

常用的属性和方法如下    

5.       SortedList类

与哈希表类似,区别在于SortedList中的Key数组排好序的

//SortedList

System.Collections.SortedList list=new System.Collections.SortedList();

list.Add("key2",2);

list.Add("key1",1);

for(int i=0;i<list.Count;i++)

{

System.Console.WriteLine(list.GetKey(i));

}

 

6.Hashtable类

哈希表,名-值对。类似于字典(比数组更强大)。哈希表是经过优化的,访问下标的对象先散列过。如果以任意类型键值访问其中元素会快于其他集合。

GetHashCode()方法返回一个int型数据,使用这个键的值生成该int型数据。哈希表获取这个值最后返回一个索引,表示带有给定散列的数据项在字典中存储的位置。

Hashtable 和 Dictionary <K, V> 类型 
1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.
2:多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减.
3:Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便.

 

HashTable中的key/value均为object类型,由包含集合元素的存储桶组成。存储桶是 HashTable中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。HashTable的优点就在于其索引的方式,速度非常快。如果以任意类型键值访问其中元素会快于其他集合,特别是当数据量特别大的时候,效率差别尤其大。

HashTable的应用场合有:做对象缓存,树递归算法的替代,和各种需提升效率的场合。

    //Hashtable sample
    System.Collections.Hashtable ht = new System.Collections.Hashtable(); 
    //--Be careful: Keys can't be duplicated, and can't be null----
    ht.Add(1, "apple");
    ht.Add(2, "banana");
    ht.Add(3, "orange");     
    //Modify item value:
    if(ht.ContainsKey(1))
        ht[1] = "appleBad"; 
    //The following code will return null oValue, no exception
    object oValue = ht[5];      
    //traversal 1:
    foreach (DictionaryEntry de in ht)
    {
        Console.WriteLine(de.Key);
        Console.WriteLine(de.Value);
    } 
    //traversal 2:
    System.Collections.IDictionaryEnumerator d = ht.GetEnumerator();
    while (d.MoveNext())
    {
        Console.WriteLine("key:{0} value:{1}", d.Entry.Key, d.Entry.Value);
    } 
    //Clear items
    ht.Clear();


Dictionary和HashTable内部实现差不多,但前者无需装箱拆箱操作,效率略高一点。

    //Dictionary sample
    System.Collections.Generic.Dictionary<int, string> fruits =          new System.Collections.Generic.Dictionary<int,string>(); 
    fruits.Add(1, "apple");
    fruits.Add(2, "banana");
    fruits.Add(3, "orange"); 
    foreach (int i in fruits.Keys)
    {
        Console.WriteLine("key:{0} value:{1}", i, fruits);     }

    if (fruits.ContainsKey(1))
    {
        Console.WriteLine("contain this key.");
    }

 
HashTable是经过优化的,访问下标的对象先散列过,所以内部是无序散列的,保证了高效率,也就是说,其输出不是按照开始加入的顺序,而Dictionary遍历输出的顺序,就是加入的顺序,这点与Hashtable不同。如果一定要排序HashTable输出,只能自己实现:

    //Hashtable sorting
    System.Collections.ArrayList akeys = new System.Collections.ArrayList(ht.Keys); //from Hashtable
    akeys.Sort(); //Sort by leading letter
    foreach (string skey in akeys)
    {
        Console.Write(skey + ":");
        Console.WriteLine(ht[skey]);
    }

 

HashTable与线程安全

为了保证在多线程的情况下的线程同步访问安全,微软提供了自动线程同步的HashTable:

如果 HashTable要允许并发读但只能一个线程写, 要这么创建 HashTable实例:

    //Thread safe HashTable
    System.Collections.Hashtable htSyn = System.Collections.Hashtable.Synchronized(newSystem.Collections.Hashtable());

这样, 如果有多个线程并发的企图写HashTable里面的 item, 则同一时刻只能有一个线程写, 其余阻塞; 对读的线程则不受影响。

 

另外一种方法就是使用lock语句,但要lock的不是HashTable,而是其SyncRoot;虽然不推荐这种方法,但效果一样的,因为源代码就是这样实现的:

//Thread safe

private static System.Collections.Hashtable htCache = new System.Collections.Hashtable ();

 

public static void AccessCache ()

{

    lock ( htCache.SyncRoot )

    {

        htCache.Add ( "key", "value" );

 

        //Be careful: don't use foreach to operation on the whole collection

        //Otherwise the collection won't be locked correctly even though indicated locked

        //--by MSDN

    }

}

 

 

//Is equivalent to 等同于 (lock is equivalent to Monitor.Enter and Exit()

public static void AccessCache ()

{

    System.Threading.Monitor.Enter ( htCache.SyncRoot );

 

    try

    {

        /* critical section */

        htCache.Add ( "key", "value" );

 

        //Be careful: don't use foreach to operation on the whole collection

        //Otherwise the collection won't be locked correctly even though indicated locked

        //--by MSDN

    }

    finally

    {

        System.Threading.Monitor.Exit ( htCache.SyncRoot );

    }

}

7. Stack类

栈,后进先出。push方法入栈,pop方法出栈。

System.Collections.Stack stack=new System.Collections.Stack();

stack.Push(1);

stack.Push(2);

 

System.Console.WriteLine(stack.Peek());

while(stack.Count>0)

{

System.Console.WriteLine(stack.Pop());

}

 

8.Queue类

队列,先进先出。enqueue方法入队列,dequeue方法出队列。

System.Collections.Queue queue=new System.Collections.Queue();

queue.Enqueue(1);

queue.Enqueue(2);

 

System.Console.WriteLine(queue.Peek());

while(queue.Count>0)

{

System.Console.WriteLine(queue.Dequeue());

}



浅析C#中数组,ArrayList与List对象的区别

我们先来了解一下数组,因为数组在C#中是最早出现的。

数组

数组有很多的优点,比如说数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单,比如:

代码如下:

string[] s=new string[3];

//赋值

s[0]="a";

s[1]="b";

s[2]="c";

//修改

s[1]="b1";

但是,数组也存在一些不足的地方。比如在数组的两个数据间插入数据也是很麻烦的。还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。这样如果在声明数组时我们并不清楚数组的长度,就变的很棘手了。

针对于数组的这些缺点,C#中最先提供了ArrayList对象来克服这些缺点。

ArrayList

ArrayList是.Net Framework提供的用于数据存储和检索的专用类,它是命名空间System.Collections下的一部分。它的大小是按照其中存储的数据来动态扩充与收缩的。所以,我们在声明ArrayList对象时并不需要指定它的长度。

ArrayList继承了IList接口,所以它可以很方便的进行数据的添加,插入和移除.比如:

代码如下:

ArrayList list = new ArrayList();

//新增数据

list.Add("abc");

list.Add(123);

//修改数据

list[2] = 345;

//移除数据

list.RemoveAt(0);

//插入数据

list.Insert(0, "hello world");

从上面示例看,ArrayList好像是解决了数组中所有的缺点,那么它应该就是完美的了,为什么在C#2.0后又会出现List呢?

还 是从上面的示例看,在list中,我们不仅插入了字符串"abc",而且又插入了数字123。这样在ArrayList中插入不同类型的数据是允许的。因 为ArrayList会把所有插入其中的数据都当作为object类型来处理。这样,在我们使用ArrayList中的数据来处理问题的时候,很可能会报 类型不匹配的错误,也就是说ArrayList不是类型安全的。既使我们保证在插入数据的时候都很小心,都有插入了同一类型的数据,但在使用的时候,我们 也需要将它们转化为对应的原类型来处理。这就存在了装箱与拆箱的操作,会带来很大的性能损耗。

穿插一下装箱与拆箱的概念:

简单的来讲:

装箱:就是将值类型的数据打包到引用类型的实例中

比如将int类型的值123赋给object对象o

int i=123;

object o=(object)i;

拆箱:就是从引用数据中提取值类型

比如将object对象o的值赋给int类型的变量i

object o=123;

int i=(int)o;

装箱与拆箱的过程是很损耗性能的。

泛型List

正是因为 ArrayList存在不安全类型与装箱拆箱的缺点,所以在C#2.0后出现了泛型的概念。而List类是ArrayList类的泛型等效类。它的大部分 用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内 数据的对象类型。

比如:

代码如下:

List<int> list = new List<int>();

//新增数据

list.Add(123);

//修改数据

list[0] = 345;

//移除数据

list.RemoveAt(0);

上例中,如果我们往List集合中插入string字符"hello world",IDE就会报错,且不能通过编译。这样就避免了前面讲的类型安全问题与装箱拆箱的性能问题了。


Unity 2D两种常用判断点击的方法

1.Raycast法

原理相同于3D中得Raycast法,具体使用略有区别。

1 RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); 23if(hit.collider != null)5{ 7   Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);8   //and do what you want 9 } 

2.Overlap法

个人觉得这个方法对于2D更合适一些,判断点击的点落在了哪些collider中。

1 Collider2D[] col = Physics2D.OverlapPointAll(Camera.main.ScreenToWorldPoint(Input.mousePosition));

2 3if(col.Length > 0)4

{5foreach(Collider2D c in col)6    

{7          //do what you want8    }9 } 

以上代码中用到的是mousePosition,对于触摸的Touch原理完全相同。

 


unity使用手势时,通过射线判断是否触碰到了某物体

必须给物体添加碰撞器,比如Box Collider

然后在Update中检测手势,此处假设为手指在屏幕上移动

主相机的视角(Camera.main)从手指移动处(Input.GetTouch(0).position)发射射线,设置射线发射距离。

当射线碰撞到了带有碰撞器的物体,就会存储该物体的信息。

void  Update(){   if(Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved){ Ray ray = Camera.main.ScreenPointToRay (Input.GetTouch(0).position);      //hit用来存储碰撞物体的信息 RaycastHit hit;      //ray表示射线,hit存储物体的信息,1000为设定射线发射的距离   if(Physics.Raycast (ray, out hit, 1000)){ print(hit.transform.name.ToString());   }  } }


unity3d BoonBoon EasyTouch

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System.Collections;

[System.Serializable]
public class ETCArea : MonoBehaviour {

    public enum AreaPreset { Choose, TopLeft, TopRight, BottomLeft, BottomRight};

    public bool show;

    #region Constructeur
    public ETCArea(){
        show = true;
    }
    #endregion

    #region MonoBehaviour Callback
    public void Awake(){
        GetComponent<Image>().enabled = show;
    }
    #endregion

    public void ApplyPreset(AreaPreset preset){

        RectTransform parent = transform.parent.GetComponent<RectTransform>();
    
        switch (preset) {
            case AreaPreset.TopRight:
                this.rectTransform().anchoredPosition = new Vector2(parent.rect.width/4f,parent.rect.height/4f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,parent.rect.width/2f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,parent.rect.height/2f);

                this.rectTransform().anchorMin = new Vector2(1,1);
                this.rectTransform().anchorMax = new Vector2(1,1);
                this.rectTransform().anchoredPosition = new Vector2( -this.rectTransform().sizeDelta.x/2f , -this.rectTransform().sizeDelta.y/2f );

                break;

            case AreaPreset.TopLeft:
                this.rectTransform().anchoredPosition = new Vector2(-parent.rect.width/4f,parent.rect.height/4f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,parent.rect.width/2f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,parent.rect.height/2f);

                this.rectTransform().anchorMin = new Vector2(0,1);
                this.rectTransform().anchorMax = new Vector2(0,1);
                this.rectTransform().anchoredPosition = new Vector2( this.rectTransform().sizeDelta.x/2f, -this.rectTransform().sizeDelta.y/2f );

                break;

            case AreaPreset.BottomRight:
                this.rectTransform().anchoredPosition = new Vector2(parent.rect.width/4f,-parent.rect.height/4f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,parent.rect.width/2f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,parent.rect.height/2f);

                this.rectTransform().anchorMin = new Vector2(1,0);
                this.rectTransform().anchorMax = new Vector2(1,0);
                this.rectTransform().anchoredPosition = new Vector2( -this.rectTransform().sizeDelta.x/2f , this.rectTransform().sizeDelta.y/2f );

                break;
                
            case AreaPreset.BottomLeft:
                this.rectTransform().anchoredPosition = new Vector2(-parent.rect.width/4f,-parent.rect.height/4f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal,parent.rect.width/2f);
                this.rectTransform().SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical,parent.rect.height/2f);

                this.rectTransform().anchorMin = new Vector2(0,0);
                this.rectTransform().anchorMax = new Vector2(0,0);
                this.rectTransform().anchoredPosition = new Vector2( this.rectTransform().sizeDelta.x/2f , this.rectTransform().sizeDelta.y/2f );

                break;
        }

         

    }
}

Privacy policy 隐私政策

Privacy policy 隐私政策


我們不會收集及以任何形式儲存來自你社交網路的任何資訊或銷售給廣告或其它營運機構。


个人信息 


當你透過社交網路進行分享時,可能會要求輸入帳號密碼,但該資訊由iOS系統管理,App不會以任何形式儲存帳號密碼,也不會收集及以任何形式儲存您在社交網路上的任何個人資訊。


隐私政策条款 

使用本App即表示您同意此隱私政策的條款和條件。如果您不同意本政策,請不要使用該App。我們保留權利,在我們決定更改,修改,增加或刪除本政策的部分,在任何時候。請定期瀏覽此網頁查閱任何修改。如果您繼續使用我們的App以後的任何更改這些條款的發布將意味著你已經接受了這些調整。

联络信箱: activet@163.com



PRIVACY POLICY


We do not collect and save from your social account  in any form or sell any information to advertisers or other operators.


Personal information 


When you share information through social accounts may be asked to enter the account and password, but that information is management by iOS system. App does not save account and password in any form or collect and save any personal information in any form on your social account.


Privacy Policy Terms 


Use this App mean you agree to the terms and conditions of this Privacy Policy. If you do not agree to this policy, please do not use this App. We reserve the right, in our decision to change, modify, add or remove portions of this policy at any time. Please check this page periodically for any changes. Publish any changes to these terms if you continue to use our App future will mean that you have accepted these adjustments.

E-Mail :lingyifang4@163.com