我正试图UIButton在点击时进行缩放动画,但我想要完成的是当按钮点击时我需要UIButton更小到内部然后它回到相同的大小(像气泡).
我尝试了以下方法:
button.transform = CGAffineTransformMakeScale(-1, 1)
UIView.animateWithDuration(0.5, animations: { () -> Void in
button.transform = CGAffineTransformMakeScale(1,1)
})
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用CGAffineTransformMakeScale为自定义按钮设置动画,如下所示:
if (stateButton == 0) { //The button is gonna appear
self.selected = YES;
self.imageView.transform = CGAffineTransformMakeScale(0.01, 0.01);
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
// animate it to the identity transform (100% scale)
self.imageView.transform = CGAffineTransformIdentity;
} completion:nil];
}
else if (stateButton ==1) { //The button is gonna disappear
self.imageView.transform = CGAffineTransformMakeScale(1, 1);
[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^{
// decrease button
self.imageView.transform = CGAffineTransformMakeScale(.01, .01);
} completion:^(BOOL finished){
self.selected = NO;
}];
}
Run Code Online (Sandbox Code Playgroud)
按钮完美地增长到原始大小,但是,我不知道原因,但是当我点击按钮减少它时,它从原始尺寸大100%的尺寸减小到原始尺寸,而不是开始如我在代码中所示,原始尺寸减小并达到0.01的标度.
请帮忙!!
我认为我的问题可以归结为如何存储和重置视图的转换.但随后解释我的情况可能有所帮助.
如果我将下面的变换一个接一个地应用到视图中(就像我将此代码添加到开关或按钮一样).我得到了我期望的完全结果:比例在:原始视图大小的.55倍的视图和原始比例的视图之间切换.也可以按照我的意愿扩展someView的子视图.广告无限.完善.
//tranformScale 1
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 0.55, 0.55 );
//tranformScale 2
someView.transform = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, 1.0 );
Run Code Online (Sandbox Code Playgroud)
麻烦的是我想使用这个代码(或类似的)来缩放self.view的子视图,当iOS设备进入横向时,将子视图适合横向屏幕(并在纵向时备份).它几乎可以工作,但由于某种原因而不是为要缩放的视图的帧输出圆值(如使用按钮调用变换的测试所发生的那样),会产生逐渐奇怪的值.最终,在大约4次旋转后,子视图飞离屏幕.我怀疑它与self.view改变形状有关,但是当我记录self.view的框架时,它的形状是非常可预测的.
顺便说一下,我使用autoresizingMask灵活边距来居中视图,而不是使用自动布局.也许我应该用另一种类型的计算来集中视图?
谢谢阅读!
下面的手势识别器代码通常会从中心缩放视图,但在iOS6中启用自动布局时则不会.当启用自动布局时,视图似乎从其原点开始缩放.其他仿射变换(特别是缩放和旋转)也没有像我预期的那样工作.
任何人都有这个问题,或者可以让我以正确的方式处理这个问题?
- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer {
recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
recognizer.scale = 1;
}
Run Code Online (Sandbox Code Playgroud) xcode cgaffinetransform ios cgaffinetransformscale autolayout
我可能错过了一些简单的东西,但试图用图像视图做一个简单的"肯伯恩斯效应".
首先是代码:
[UIView animateWithDuration:20
delay:2
options:UIViewAnimationCurveLinear
animations:^{
CGAffineTransform move = CGAffineTransformMakeTranslation(40, 40);
CGAffineTransform zoom = CGAffineTransformMakeScale(1.2, 1.2);
CGAffineTransform transform = CGAffineTransformConcat(zoom, move);
self.imageView.transform = transform;
}
completion:^(BOOL finished){
NSLog(@"Done");
}];
Run Code Online (Sandbox Code Playgroud)
我希望这可以从正常比例的图像视图开始,并在20秒内将其扩展到120%的大小.实际发生的是它立即开始小于正常尺寸,然后扩展到正常尺寸.
如果我使用比例值的倒数,它会开始放大然后缩小到正常比例,这与我想要的效果相反.
有任何想法吗?
我正在舍入一个UIBUtton,这很好(自我是一个uibutton子类):
self.layer.cornerRadius = self.frame.size.width/2;
self.layer.masksToBounds = YES;
self.clipsToBounds = YES;
Run Code Online (Sandbox Code Playgroud)
但我也试图动画按钮缩小比例然后返回到原始大小,如下所示:
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(0.0f, 0.0f);
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(1.0f, 1.0f);
} completion:nil];
}];
Run Code Online (Sandbox Code Playgroud)
收缩/恢复动画应该发生.然而,之后我失去了角落半径,按钮又回到了正方形.如何在保持圆形按钮的同时动画和更改变换比例?
我也试过以下.它会在动画结束时将按钮恢复为圆形状态,但是在动画开始时它会回到正方形并且它看起来非常糟糕:
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(0.0f, 0.0f);
self.layer.cornerRadius = 0.0f;
self.layer.masksToBounds = YES;
self.clipsToBounds = YES;
} completion:^(BOOL finished) {
[UIView animateWithDuration:0.1 delay:0.0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.layer.affineTransform = CGAffineTransformMakeScale(1.0f, 1.0f);
self.layer.cornerRadius = self.frame.size.width/2;
self.layer.masksToBounds = YES;
self.clipsToBounds = YES;
} completion:nil]; …Run Code Online (Sandbox Code Playgroud) 我试图通过将CGAffineTransform比例缩放到0 将一个简单的图像应用于imageView,但是由于某种原因,imageView的帧在动画开始之前就被搞砸了。好像自动版式正在应用于缩小的视图。我一点都不想要。我希望视图“相对”地保持在原位置,并且在视觉上缩小到其中心,但是由于视图绑定到其包含视图的顶部和右侧,因此该视图被移动了。
我想要的是使其收缩到中心并消失,但是就在它开始之前,imageView的框架正跳到其容器的右上角(似乎iOS正在动画处理并使用在动画开始之前重新定位它)。跳转到那里之后,动画相对于自身正常工作,视图相对于其中心缩小,但是我想避免它首先移动。
这都是在UITableViewCell由autolayout管理的内部进行的,所以我猜想这与autolayout有关,而<understatement>这并不是我第一次遇到autolayout的问题</understatement>。
有什么方法可以防止自动布局影响转换吗?
cgaffinetransform uiviewanimation ios cgaffinetransformscale autolayout
我想实现一个可调整大小和可拖动的UIView,如下图所示:
这是我到目前为止使用简单的手势识别器实现的类:
class PincherView: UIView {
var pinchRec:UIPinchGestureRecognizer!
var rotateRec:UIRotationGestureRecognizer!
var panRec:UIPanGestureRecognizer!
var containerView:UIView!
init(size: CGRect, container:UIView) {
super.init(frame: size)
self.containerView = container
self.pinchRec = UIPinchGestureRecognizer(target: self, action: "handlePinch:")
self.addGestureRecognizer(self.pinchRec)
self.rotateRec = UIRotationGestureRecognizer(target: self, action: "handleRotate:")
self.addGestureRecognizer(self.rotateRec)
self.panRec = UIPanGestureRecognizer(target: self, action: "handlePan:")
self.addGestureRecognizer(self.panRec)
self.backgroundColor = UIColor(red: 0.0, green: 0.6, blue: 1.0, alpha: 0.4)
self.userInteractionEnabled = true
self.multipleTouchEnabled = true
self.hidden = false
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func handlePinch(recognizer : UIPinchGestureRecognizer) { …Run Code Online (Sandbox Code Playgroud) uiview cgaffinetransformscale uipinchgesturerecognizer swift
假设我使用CGAffineTransformScale缩放UILabel,如下所示:
let scale = 0.5
text = UILabel(frame: CGRectMake(100, 100, 100, 100))
text.text = "Test"
UIView.animateWithDuration(2.0, delay: 0.0, options: UIViewAnimationOptions.CurveEaseIn, animations: {
self.text.transform = CGAffineTransformScale(self.text.transform, scale, scale)
}, completion: {(value : Bool) in
print("Animation finished")
})
Run Code Online (Sandbox Code Playgroud)
当我想将UILabel缩小一半时,这很有用.但是,如果我再次调用相同的代码,它将以0.25的比例结束,因为它再次缩放一半.
是否可以使用CGAffineTransformScale始终缩放到原始UILabel帧的一半大小,而不是累积缩放?
我有多个视图,视图上有很多UILabel.(全部在Interface Builder中构建).
当你捏屏幕时,我正试图创建一个"较小"的视图副本.
要做到这一点,我申请:
view.transform = CGAffineTransformMakeScale(.5, .5);
Run Code Online (Sandbox Code Playgroud)
然后我也调整了视野.
问题是在转换之后,我所有UILabel中的文本变得"模糊".它不会保持像素完美,因为它在全尺寸视图中.
有没有办法在转换后增加标签的像素化?
ios ×9
swift ×3
autolayout ×2
uiview ×2
autoresize ×1
calayer ×1
ios7 ×1
objective-c ×1
uibutton ×1
uiimageview ×1
uilabel ×1
xcode ×1