很多朋友在项目开发时会遇到项目的编译版本号设置问题,有的是不知道怎么设置,有的是经常忘了修改,下面介绍下
如何通过脚本自动使用SVN的版本号并惊醒修正来作为你项目的编译版本号,也就是build number。

首先我们看下脚本:

1
2
3
4
REV=svnversion -nc | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'
BASEVERNUM=/usr/libexec/PlistBuddy -c "Print :CFBundleShortVersionString" "${INFOPLIST_FILE}"
echo $REV BASEREV=2707 FINALREV=$[$REV-$BASEREV] echo $FINALREV
/usr/libexec/PlistBuddy -c “Set :CFBundleVersion $BASEVERNUM.$FINALREV””${INFOPLIST_FILE}”

其中,
REV 是取得的svn版本号
BASEVERNUM 是项目的版本号,注意不是编译版本号
BASEREV 这里用来修正,假设你的svn库在你的项目进来前已经有了2707个版本了,你可能希望你的项目从0开始算。
FINALREV 这是修正后的版本数

最后我们使用PlistBuddy工具讲编译版本号以$BASEVERNUM.$FINALREV”的格式写入info plist文件。
假设程序版本号1.0.1,计算出编译版本数(其实是svn提交次数)为105,那么最终的编译版本号,也就是build number 将是

1.0.1.1.5

当然你也可以参照例子进行格式的自定义。

说完了脚本让我们看看怎样把这些应用的具体项目里:

1.如图所示,到Build Phases点击左上部的+,选择New Run Script Build Phase

2.把新添加的Run Script拖动到Compile Sources上面:

3.你也可以给这个脚本起个名字,比如SetBuildNumber Script

4.把脚本代码粘贴进去,大功告成,编译一下,看看你的成果吧。

UIView 的旋转与缩放以及同时应用两种效果(一)UIView 的旋转与缩放以及同时应用两种效果(二)中我们探讨了如何对UIView应用旋转以及缩放效果,下面我们来探讨一下如何对应用了CGAffineTransform效果的UIView进行移动操作。(这里假设view是UIView的一个实例,中心点原始坐标为(50,50))

通常我们怎么改变一个view的位置呢?你肯定想得到,那就是设置一个新的中心点给view。代码是如此简单:

1
view.center=CGPointMake(100.0, 50.0);

可是等等,我的view刚刚应用了旋转和缩放效果,现在我只是移动了一点点的距离怎么看起来view在乱跑,完全不是我要的(100,50);

如前面两篇博文所讲,在应用旋转与缩放效果时,已经对原始的坐标系有了影响。我们知道CGAffineTransform是一个矩阵变换,所以我们只要根据矩阵变换的知识,计算出我们需要的中心点不就行了?可是。。。数学早忘光了,该怎么办?

在Apple的文档中我注意到这样一个方法:CGAffineTransformCGAffineTransformTranslate(CGAffineTransformt,CGFloattx,CGFloatty)

问题迎刃而解。假设在view的touch begin方法里去的了拖动的其实坐标,那么在touch move方法里你可用如下代码实现view的拖动操作(这里的self指的是view本身):

1
2
3
float offsetX = currentPoint.x - _touchBeginPoint.x;
float offsetY = currentPoint.y - _touchBeginPoint.y;
self.transform = CGAffineTransformTranslate(self.transform, offsetX, offsetY);

UIView 的旋转与缩放以及同时应用两种效果(一)中,我们介绍了对UIView进行缩放与旋转的几种方法,这篇文章讲继续这些方法的具体应用的探讨。

我们考虑这样一种需求:对UIView同时进行缩放和旋转(以0.5倍等比缩放和45度旋转为例)。
在我自己的实践中,最开始的想法很简单,CGAffineTransformMakeScale(0.5, 0.5)进行缩放,接着使用CGAffineTransformMakeRotation (M_PI_2)进行旋转,问题马上出来了,view并不会在缩放的同时进行旋转,而是只应用了最后的旋转效果。
一番研究之后,找到了可行的解决方案,即:

分别使用CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)CGAffineTransform CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)替换上面的两个方法,具体代码如下:

1
2
view.transform = CGAffineTransformScale(view.transform, 0.5, 0.5);
view.transform = CGAffineTransformRotate (view.transform, M_PI_2);

到此,我们在缩放的同时旋转的目的已经达到,但探索的脚步还要向前,新的问题是:

如何移动应用了CGAffineTransform效果的view?

让我们在如何移动应用了CGAffineTransform效果的UIView里继续探讨

对于UIView的缩放,最简单的方法可以是修改view的frame,这里不做讨论。

我们来讨论一下 CGAffineTransform在UIView的缩放与旋转上的应用。以下假设view为UIView的一个实例。
1. UIView的缩放
CGAffineTransform提供了两个方法用于缩放,分别是CGAffineTransform CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)CGAffineTransform CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)

1.1 CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)
这个方法可以方便的对view的长和宽进行缩放,不改变view的中心点。注意!中心点不变指的是物理位置不变,不是坐标,因为坐标系此时已经发生改变。
例如:对view进行0.5等比缩放:

1
view.transform = CGAffineTransformMakeScale(0.5, 0.5);

1.2 CGAffineTransformScale(CGAffineTransform t,CGFloat sx, CGFloat sy)
这个方法同样是view的长和宽进行缩放,效果类似CGAffineTransformMakeScale(CGFloat sx, CGFloat sy)不同的是这个方法可以叠加其他CGAffineTransform效果(比如旋转)
例如:对view进行0.5等比缩放:

1
view.transform = CGAffineTransformScale(view.transform, 0.5, 0.5);

2. UIView的旋转
CGAffineTransform提供了两个方法用于旋转,分别是CGAffineTransform CGAffineTransformMakeRotation(CGFloat angle)CGAffineTransform CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)

2.1 CGAffineTransformMakeRotation(CGFloat angle)
这个方法可以方便的对view进行旋转,不改变view的中心点。注意!中心点不变指的是物理位置不变,不是坐标,因为坐标系此时已经发生改变。
例如:对view进行45度旋转:

1
view.transform = CGAffineTransformMakeRotation (M_PI_4);

2.2 CGAffineTransformRotate(CGAffineTransform t, CGFloat angle)
这个方法同样是对view进行旋转,效果类似CGAffineTransformMakeRotation(CGFloat angle)不同的是这个方法可以叠加其他CGAffineTransform效果(比如缩放)
例如:对view进行45度旋转:

1
view.transform = CGAffineTransformRotate (view.transform, M_PI_2);

相关链接: UIView 的旋转与缩放以及同时应用两种效果(二)