Tag: cgaffinetransform

放大滚动视图内的旋转图像以适应(填充)覆盖矩形的框架

通过这个问题和答案,我现在已经有了一个检测任意旋转的图像何时不完全在裁剪矩之外的工作方法。 下一步是弄清楚如何正确调整它的包含滚动视图缩放,以确保在裁剪矩形内没有空的空间。 为了澄清,我想放大(放大)图像; 作物长势应该保持不变。 布局层次结构如下所示: containing UIScrollView UIImageView (this gets arbitrarily rotated) crop rect overlay view …其中UIImageView也可以在scrollView中缩放和平移。 有4个手势事件需要考虑: 平移手势(完成):通过检测是否被错误地平移并重置contentOffset来完成。 旋转CGAffineTransform 滚动视图缩放 修剪矩形覆盖框的调整 据我所知,我应该能够使用相同的逻辑2,3和4来调整scrollScale的滚动视图,使图像适合正确。 如何正确地计算使旋转的图像完全适合于裁剪内部所需的缩放比例? 为了更好地说明我想要完成的事情,下面是一个错误大小的例子: 我需要计算所需的缩放比例,使其看起来像这样: 以下是我目前使用Oluseyi的解决scheme的代码。 它适用于旋转angular度较小(例如小于1弧度)的情况,但任何情况下都会变得非常糟糕。 CGRect visibleRect = [_scrollView convertRect:_scrollView.bounds toView:_imageView]; CGRect cropRect = _cropRectView.frame; CGFloat rotationAngle = fabs(self.rotationAngle); CGFloat a = visibleRect.size.height * sinf(rotationAngle); CGFloat b = visibleRect.size.width * cosf(rotationAngle); CGFloat […]

围绕它的中心点旋转UIImageView?

我有一个UIImageView( self.myImage )内的透明PNG,我想围绕其中心点旋转。 代码应该很简单: [self.myImage.layer setAnchorPoint:CGPointMake(0.5, 0.5)]; [UIView animateWithDuration:1.0 animations:^{ [self.myImage setTransform:CGAffineTransformMakeRotation(angle)]; }]; 图像以正确的速度/时间以正确的angular度旋转,但其位置被移位。 这是一个发生了什么的例子: 灰色方块只是显示在屏幕上的位置。 透明png(包含在UIImageView中)是另一个graphics。 白色虚线显示了UIImageView的中心。 图像的左侧显示图像的原始位置,右侧显示的是用上面的代码旋转后的图像(它向右偏移一点)。 黑白圆圈在图像文件的中心。 有什么我失踪? 据我所知,上面的第一行不是必需的,因为这些是默认值。 我是否必须在故事板/编程设置中设置/取消设置?

iOS6中的手势识别器和自动布局,从中心缩放

下面的这个手势识别器代码,通常会从中心缩放一个视图,而不是在iOS6中启用自动布局时。 自动布局启用时,视图似乎从原点开始缩放。 其他的仿射变换(特别是缩放和旋转)也没有像我预期的那样工作。 任何人有这个问题,或者可以启发我以正确的方式来处理这个问题? – (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer { recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale); recognizer.scale = 1; }

CGAffineTransform缩放和平移 – 在animation之前跳转

我正在努力解决CGAffineTransform缩放和转换问题,当我在已经有转换的视图上的animation块中设置转换时,视图在animation之前跳转了一下。 例: // somewhere in view did load or during initialization var view = UIView() view.frame = CGRectMake(0,0,100,100) var scale = CGAffineTransformMakeScale(0.8,0.8) var translation = CGAffineTransformMakeTranslation(100,100) var concat = CGAffineTransformConcat(translation, scale) view.transform = transform // called sometime later func buttonPressed() { var secondScale = CGAffineTransformMakeScale(0.6,0.6) var secondTranslation = CGAffineTransformMakeTranslation(150,300) var secondConcat = CGAffineTransformConcat(secondTranslation, secondScale) UIView.animateWithDuration(0.5, […]

更改UIImageView图像翻转animation的一半

如何在翻转animation的一半更改UIImageView的图像。 我的代码似乎翻转了UIImageView,并成功地改变了图像,但它瞬间改变。 我想达到的目的只是在180度翻盖达到90度翻盖后才改变图像。 这是我的代码: 在视图上创buildUIImageView: UIImage *image = [UIImage imageNamed:@"fb1.jpg"]; imageView = [[UIImageView alloc] initWithImage:image]; vw = [[UIView alloc] initWithFrame:CGRectMake(20, 20, 80, 80)]; vw.layer.cornerRadius = vw.frame.size.width / 2; imageView.frame = CGRectMake(20, 20, 80, 80); imageView.layer.cornerRadius = imageView.frame.size.width / 2; imageView.layer.masksToBounds = YES; imageView.layer.borderColor = [[UIColor blackColor] CGColor]; imageView.layer.borderWidth = 1.0; [self.view addSubview: imageView]; //[self.view addSubview:vw]; […]

将转换应用于UITextView – 防止内容大小调整

当我将一个旋转变换应用到UITextView ,然后点击里面开始编辑时,内容大小似乎会自动变宽。 内容视图的新宽度是旋转的视图的边界框的宽度。 例如,给定一个宽度为500,高度为400,旋转30度的文本框,新的内容宽度为: (500 * cos(30)) + (400 * sin(30)) = 633 或以graphics方式: 有趣的是,如果您已经在编辑文本视图,然后应用转换,那么似乎没有对内容大小进行修改。 因此,在文本编辑开始的某个时候,文本视图会查看其frame属性,并根据帧宽度调整内容大小。 我想这个解决scheme是告诉它使用bounds属性,但是我不知道该怎么做,因为我不确定文本视图在哪里决定修改内容的大小。 我google了,但似乎无法find使用转换UITextViews的任何引用。 有没有人有这个想法? 编辑(testing项目中的button动作): – (IBAction)rotateButtonTapped:(id)sender { if (CGAffineTransformIsIdentity(self.textView.transform)) { self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0); } else { self.textView.transform = CGAffineTransformIdentity; } NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height); }

iOS8中CGAffineTransform的animation看起来与iOS7中的不同

我试图find为什么animation的UIView变换属性看起来不同在iOS 8比iOS 6/7。 举个简单的例子,在iOS 8之前: myView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, 1.57); [UIView animateWithDuration:5 animations:^{ myView.transform = CGAffineTransformTranslate(plane.transform, 100, 0); }]; 给出预期的结果,“myView”旋转了90度并向下移动,但是在iOS8中,当翻译animation时,它开始于我无法find解释的位置(这打断了animation)。 有谁知道它的解释? 提前致谢!

用CGAffineTransform进行缩放并设置锚点

如果我正确地理解用CGAffineTransform缩放一个UIView锚定转换到其中心。 尤其是: self.frame = CGRectMake(0,0,100,100); self.transform = CGAffineTransformMakeScale(2, 2); NSLog(@"%f;%f;%f;%f", self.frame.origin.x, self.frame.origin.y, self.frame.size.width, self.frame.size.height); 打印: -50;-50;200;200 你如何创build一个使用特定锚点(比如0; 0)的CGAffineTransform比例?

CGAffine转换并缩放到图像的中心

我开始使用Rory Lewis书中的绝对初学者的iPhone和iPad应用程序来学习Objective-C,但是我陷入了第5章。 我想制作缩小图像的button。 我的问题是,在我写完所有代码后,图像缩小到UIImageView(左上angular)的点(0,0),而在video中图像收缩到中心。 我做了一些研究,发现CGAffineTransform使用对象的中心来进行翻译,旋转等。 那么为什么它不起作用呢? 我有最新的Xcode版本,并没有做任何奇怪的事情。 我希望我已经清楚。 对不起我的英语不好。 编辑对不起,但我从我的手机写的问题。 无论如何,有罪的部分是这样的 – (IBAction)shrink:(id)sender { if(hasShrink == NO){ [shrinkButton setTitle:@"Grow" forState:UIControlStateNormal]; } else if(hasShrink == YES){ [shrinkButton setTitle:@"Shrink" forState:UIControlStateNormal]; } [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:1.0]; myIcon.transform = CGAffineTransformMakeScale(.25, .25); hasShrink = YES; [UIView commitAnimations]; } 所有的animation都是正确的书面和应用程序的工作,它只是缩小到左上angular。 为什么这个点在默认情况下不会被设置为UIImageView的中心? 编辑:我想通了这是由AutoLayout引起的问题。 一旦停用,一切顺利;)

使用CGAffineTransform在视图上应用缩放和旋转

所以我需要应用一些缩放和一些旋转到一个视图(我使用手势做这个),所以对于每个手势,我更新当前的缩放和旋转值,如下所示: self.scaleWidth *= gesture.scale; //When I detect an horizontal pinch self.scaleHeight *= gesture.scale; //When I detect a vertical pinch self.rotationAngle += gesture.rotationAngle; //When I detect a rotation 然后我做了以下转换的观点: CGAffineTransform transform = CGAffineTransformScale(CGAffineTransformIdentity, self.scaleWidth, self.scaleHeight); self.theSubViewToTransform.transform = CGAffineTransformRotate(transform, self.rotationAngle); 当我只做缩放,它工作正常。 当我做缩放,然后旋转,它转动很好。 当旋转后,我尝试再次缩放,它不能正常工作:缩放应用,如同在旋转后完成,使图像结构变形。 我想我做了什么需要做的,以避免这种情况:每次从身份转换开始,先缩放然后旋转,但显然我错了… 有没有人知道我的实现有什么问题? 谢谢