当前位置:  编程技术>移动开发
本页文章导读:
    ▪Objective-C语法之NSSet跟NSMutableSet        Objective-C语法之NSSet和NSMutableSet NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。 .........
    ▪ wp7自定义及传送EventHandler参数        wp7自定义及传递EventHandler参数 a.定义参数类类,继承自基类EventArgs using System; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Ink; usin.........
    ▪ Frame Animation 帧动画片       Frame Animation 帧动画话说锁屏模块已经做完却过去2个月了,期间也出现一些bug,都一一化解了。寻思着该模块现在功能简洁,操作优雅,应该是不用操心了。 但事情往往是不会如人意的,我.........

[1]Objective-C语法之NSSet跟NSMutableSet
    来源: 互联网  发布时间: 2014-02-18
Objective-C语法之NSSet和NSMutableSet

NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。


1、NSSet的使用 [NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造
[NSSet setWithArray:(NSArray *)array];用数组构造
[NSSet setWithObjects:...]:创建集合对象,并且初始化集合中的数值,结尾必需使用nil标志。
[set count] ; 得到这个结合对象的长度。
[set containsObject:...]: 判断这个集合中是否存在传入的对象,返回Bool值。
[set objectEnumerator]: 将集合放入迭代器。
[enumerator nextObject]:得到迭代器中的下一个节点数据,使用while遍历这个迭代器,方可遍历集合对象中的对象。
[set isEqualToSet:objset]:判断两个集合是否完全相等,返回Bool值。
[set isSubsetOfSet:objset]:判断集合中的所有数据是否都相等与objeset集合中,返回Bool值。
[set allObjects];

示例代码:

1.1 以NSArray构造set
 NSArray *array = [[NSArray alloc] initWithObjects:@"对象abc",@"rongfzh", @"totogo2010",nil];
        NSSet *set3 = [NSSet setWithArray:array];
        NSLog(@"%@", set3);

打印:

2012-07-10 09:39:02.015 objectiveC[720:403] {(
    rongfzh,
    "\U5bf9\U8c61abc",
    totogo2010
)}

1.2 set的一些比较方法的使用。

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        NSSet *set = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"男",nil];
        NSSet *set1 = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"男",@"性别",nil];
        
        NSLog(@"set count:%lu", [set count]);
        //判断是否含有age字符串
        if([set containsObject:@"age"]) {
            NSLog(@"set包含age");
        }
        //判断set 是否等于set1
        if ([set isEqualToSet:set1]) {
            NSLog(@"set 等于 set1");
        }
        //判断set是否是否是set1的子集合
        if ([set isSubsetOfSet:set1]) {
            NSLog(@"set isSubsetOfSet set1");
        }
        //获取所有set对象
        NSArray *array = [set allObjects];
        NSLog(@"array:%@", array);
        
        //迭代遍历
        NSEnumerator *enumerator = [set objectEnumerator];
        for (NSObject *object in enumerator) {
            NSLog(@"set1里的对象:%@", object);
        }
    }
    return 0;
}

打印结果:

2012-07-10 09:50:32.018 objectiveC[939:403] set count:5
2012-07-10 09:50:32.020 objectiveC[939:403] set包含age
2012-07-10 09:50:32.021 objectiveC[939:403] set isSubsetOfSet set1
2012-07-10 09:50:32.023 objectiveC[939:403] array:(
    age,
    25,
    "\U7537",
    "\U5f20\U4e09",
    name
)
2012-07-10 09:50:32.027 objectiveC[939:403] set1里的对象:age
2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:25
2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:男
2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:张三
2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:name
2、NSMutableSet的使用

NSMutableSet继承NSSet,它可以使用NSSet的方法。

[NSMutableSet setWithCapacity:6]:创建可变集合对象,并且初始化长度为6。
[set addObject: obj] : 向集合中动态的添加对象。
[set removeObject:obj]:删除集合中的一个对象。
[set removeAllObjects]:删除集合中的所有对象。
[set unionSet:obj]:向集合中添加一个obj集合的所有数据。
[set minusSet:obj]:向集合中删除一个obj集合的所有数据。
[set intersectSet]:向集合中删除一个不包含obj集合的所有数据。

示例代码:

int main(int argc, const char * argv[])
{
    @autoreleasepool {
        NSMutableSet *muSet = [NSMutableSet setWithCapacity:6];
        [muSet addObject:@"对象1"];
        NSSet *set = [NSSet setWithObjects:@"对象2",@"对象3", @"被企鹅咬了一口", nil];
        //添加set数据
        [muSet unionSet:set];
        for (NSObject *object in muSet) {
            NSLog(@"all nuSet:%@",object);
        }
        NSSet *set1 = [NSSet setWithObjects:@"对象2",@"对象3", nil];
        
        //在muSet中删除包含set1总数据
        [muSet minusSet:set1];
        for (NSObject *object in muSet) {
            NSLog(@"after minusSet:%@",object);
        }
            
    }
    return 0;
}

打印结果:

2012-07-10 10:09:08.194 objectiveC[1156:403] all nuSet:对象1
2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:被企鹅咬了一口
2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:对象2
2012-07-10 10:09:08.197 objectiveC[1156:403] all nuSet:对象3
2012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:对象1
2012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:被企鹅咬了一口

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!


    
[2] wp7自定义及传送EventHandler参数
    来源: 互联网  发布时间: 2014-02-18
wp7自定义及传递EventHandler参数
a.定义参数类类,继承自基类EventArgs

using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Calendar.Controls
{
    public class AlmanacSelectionChangedEventArgs : EventArgs
    {
        private AlmanacSelectionChangedEventArgs() { }
        
        //AlmanacInfo是一个封装了某些数据的结构体,它的对象就是索要传递的数据
        internal AlmanacSelectionChangedEventArgs(AlmanacInfo selectedAlmanac)
        {
            SelectedAlmanac = selectedAlmanac;
        }

        public AlmanacInfo SelectedAlmanac { get; private set ; }
    }
}

b.定义委托事件, 装载参数:
        public event EventHandler<AlmanacSelectionChangedEventArgs> SelectionChanged;

         private void OnDoneButtonClick(object sender, EventArgs args)
        {
            SelectionChanged(sender, new AlmanacSelectionChangedEventArgs (m_SelectedItem));
        }

c.注册事件响应,在时间触发时通过EventHandler参数传递AlmanacInfo数据:

         private void OnNavigated( object sender, NavigationEventArgs e)
         {
              AlmanacPickerPage almanacPage = e.Content as AlmanacPickerPage;
              if (null != almanacPage)
              {
                   almanacPage.SelectedItem = m_AlmanacSelected;
                   almanacPage.SelectionChanged += OnSelectionChanged;
             }
        }

        private void OnSelectionChanged(object sender, AlmanacSelectionChangedEventArgs e)
        {
             m_AlmanacSelected = e.SelectedAlmanac;
        }

    
[3] Frame Animation 帧动画片
    来源: 互联网  发布时间: 2014-02-18
Frame Animation 帧动画

话说锁屏模块已经做完却过去2个月了,期间也出现一些bug,都一一化解了。寻思着该模块现在功能简洁,操作优雅,应该是不用操心了。

但事情往往是不会如人意的,我们某老总用他那粗大的手指划拉几下,就提问题了:我说这个怎么能这么小,说多少遍了你们UI设计要站在用户的角度看问题。。。。

UI设计师b见状立马跳出来接腔:“对啊对啊,我早就想说这个条太小了,我看4.0.的锁屏不错。。。不如。。。巴拉巴拉。”一听这话我当时差点吓尿了,这还两个礼拜就量产的机器,现在整这个不是扯么。

于是我小心翼翼的列举以下事实:“1,4.0锁屏用到了一些3.0之后才有的接口,我们2.3能否做到那种效果还需考究。2,4.0锁屏风格和我们机器并不是很搭,全盘推翻前面的设计方案也不利于UI设计和软件工作的继承和延续;3,离量产只剩下2周,在兼顾其他模块下无法保证完成该锁屏使其效果优秀且稳定没BUG。”领导毕竟以项目进度为重,连忙说,你们这些UI工程师没理解我的意思,原来锁屏还是可以的,只不过还有些缺点,你们在这个基础上做些必要的修改不就更好了吗。。。“听到这些,UI设计师B也只能撇撇嘴了。

既然是领导的意思那自然是要深度贯彻的,UI根据会议精神在尽量不改大框架的前提下重新设计了锁屏,其中有个地方必须要用动画实现。感觉是用frame animation(帧动画)比较简单方便,以前没用过,现学现卖了。累死我了,说这么多来引出本次的主题。

1,写了一个小demo,工程目录如下。


2,就一个类,估计没有比这更简单的逻辑了:

public class FrameAnimationActivity extends Activity {
    /** Called when the activity is first created. */
	private static final boolean DEBUG = true;
	private static final String LOG_TAG = "FrameAnimationActivity "; 
	private AnimationDrawable mAnimationDrawable;
	private Button mButton;
	private ImageView mImageView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setupView();
    }

	private void setupView() {
		// TODO Auto-generated method stub
		mButton = (Button)findViewById(R.id.bt1);
		mImageView = (ImageView)findViewById(R.id.iv1);
		mAnimationDrawable = (AnimationDrawable)mImageView.getDrawable();
		mButton.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				setUpAnimation();
			}

			private void setUpAnimation() {
				// TODO Auto-generated method stub
				if(mAnimationDrawable.isRunning()){
					if(DEBUG)Log.d(LOG_TAG, "yes is running,but stop soon.");
					mAnimationDrawable.stop();
					mImageView.setVisibility(View.INVISIBLE);
//					setUpAnimation();//加上后,点击按钮会有不一样的惊喜哦。
				}else{
					if(DEBUG)Log.d(LOG_TAG, "no is running,but running soon.");
					mImageView.setVisibility(View.VISIBLE);
					mAnimationDrawable.start();
				}
			}
		});
	}

3,布局文件和动画文件

<animation-list
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:oneshot="true">
 <item android:drawable="@drawable/icon1" android:duration="100"></item>
 <item android:drawable="@drawable/icon2" android:duration="80"></item>
 <item android:drawable="@drawable/icon3" android:duration="60"></item>
 <item android:drawable="@drawable/icon4" android:duration="50"></item>
 </animation-list>

android:oneshot=“true”这句可以设置动画是否循环播放。除了在布局里面定义动画,也可以用代码动态添加帧数和控制。

void addFrame(Drawable frame, int duration)
Add a frame to the animation
int getDuration(int i) Drawable getFrame(int index) int getNumberOfFrames() void inflate(Resources r, XmlPullParser parser, AttributeSet attrs) boolean isOneShot()

4,就是下面这张图会转动,有些像大风车。



需要源代码的,请clickMe!




    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3