Tag: cgaffinetransform

在iPhone 5s以上的设备上,CAShapeLayer不会随CGAffineTransformRotate旋转

我正在创build简单的弧形图表,如下所示: – (void)drawRect:(CGRect)rect { CGFloat lineWidth = 18.5f; CGFloat margin = 11; CAShapeLayer *circleLayer = [CAShapeLayer layer]; [circleLayer setPath:[[UIBezierPath bezierPathWithOvalInRect: CGRectMake(margin + lineWidth/2, margin + lineWidth/2, CGRectGetWidth(rect) – margin * 2 – lineWidth, CGRectGetWidth(rect)- margin * 2 – lineWidth) ] CGPath]]; [circleLayer setStrokeColor:[_fillColor CGColor]]; [circleLayer setFillColor:[[UIColor clearColor] CGColor]]; [circleLayer setLineWidth:18.5f]; [circleLayer setLineCap:kCALineCapRound]; [circleLayer setStrokeEnd: _fill]; […]

CGContext转换,提取旋转的矩形

我的意图是写一个函数,可以提取一个更大的图像旋转的矩形部分。 该旋转矩形部分用中心点(从0,0到全图像宽度/高度)的大小和旋转angular度来描述。 我担心我不了解CGContexts。 我知道,旋转后,我的坐标空间旋转。 如果angular度为0,则此function始终有效,如果angular度较小,此function显示正确。 但是,随着angular度的增加,一切都被错误地抵消了。 我正在计算类似于图像变换的仿射变换来计算左上angular,以避免任何不准确。 我也尝试了通过应用图像变换来进一步改变左上angular,以及图像变换的逆(就像一个随机的想法)。 这种方法会起作用吗? 我是否错过了某处的空间转换? 注意:通过绘制完整的图像,然后在正确的位置以正确的大小和旋转画出一个黑色的矩形,非常容易使图像区域变黑。 鉴于此,我知道我的投入是正确的。 可视化: 这代表完整的形象,我正在尝试示例旋转矩形: 该图像表示此function的所需输出: – (UIImage*) croppedImage:(UIImage*) image center:(CGPoint) rotationCenter size:(CGSize) size rotation:(CGFloat) rotation { CGFloat fullWidth = image.size.width; CGFloat fullHeight = image.size.height; CGRect imageRect = CGRectMake(0, 0, fullWidth, fullHeight); //must convert UI space to CG space, in this case that just means adjusting […]

在iOS上使用animation旋转UIImageView 180度以上

我试图通过旋转超过180度animation移动米,但它不会工作。 我使用CGAffineTransform旋转仪表,它使用净结果进行旋转。 这意味着使用此function时,我不能selectCW或CCW旋转。 我怎样才能修改这个代码,使其旋转4弧度。 目前旋转被转换为净结果,使旋转最小化。 [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:1.25]; [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut]; CGAffineTransform transform = CGAffineTransformMakeRotation(4); self.meter.transform = transform; [UIView commitAnimations]; 编辑:从答案我设法得到它通过这样做的工作 [UIView animateWithDuration:1.5 animations:^{ CABasicAnimation *fullRotation; fullRotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; fullRotation.fromValue = [NSNumber numberWithFloat:0]; fullRotation.toValue = [NSNumber numberWithFloat:((330*M_PI)/180)]; fullRotation.duration = 2.0f; fullRotation.repeatCount = 1; fullRotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; fullRotation.fillMode = kCAFillModeForwards; fullRotation.removedOnCompletion = NO; […]

移动到转换的视图时保持原始的视图方向

在图1中,我有一个名为parentView1的UIView(这是灰色的颜色视图)。 它有子视图(图片中的4)。 在将CGAffineTransformRotate应用到parentView1之前,我可以拖动一个视图(红色垂直)并放入parentView1,结果如图2所示。 但是,如果我首先在parentView1上执行CGAffineTransformRotate(请参阅代码),然后通过拖放将红色垂直视图添加到parentView1中,红色垂直视图也会立即旋转到与parentView1(图3)相同的状态垂直的看法。 我不希望它发生。 我需要将红色的垂直视图放置在原来的方向上,然后才能被拖走。 反过来也会发生同样的效果:如果parentView1已被旋转,则将子视图从parentView1移动到边界之外。 任何build议? 代码旋转parentView1: self.parentView1.transform = CGAffineTransformRotate(self.parentView1.transform, degreesToRadians(45)); 将代码从父级移到另一级: -(void)getNewPosition2:(UIView *)viewToConvert parentView:(UIView *)parentViewx superParentView:(UIView *)superParentView { CGPoint newPoint = [superParentView convertPoint:viewToConvert.center fromView:parentViewx]; // viewToConvert.layer.position = newPoint; viewToConvert.center = newPoint; [viewToConvert removeFromSuperview]; [superParentView addSubview:viewToConvert]; } 调用上面的getNewPostition2方法: [self getNewPosition2:recognizer.view parentView:self.view superParentView:self.parentView1];

旋转变换后更改uiview大小

我的代码需要来自专业xcoders的一些帮助:-) 我有一个名为“headline”的可拖动的uitextview,它是“mainstage”中的一个子视图。 我还添加了一个捏手势来更改uitextview中的字体大小。 一切工作正常,但最后的基本function,我真的需要的是uitextview的旋转。 所以我添加了一个uislider旋转和volia! 它也有效。 但是在这个转换之后,当它通过捏手势变成一个新的大小时,uitextview会变得疯狂。 (* uitextview的位置和大小) 在文档的一些研究后,我发现“一些有用的警告”(框架): 如果要在框架矩形更改时调用drawRect:方法,请将contentMode属性设置为UIViewContentModeRedraw 很不错…但是我不知道要把它放在我的代码里 换句话说:如何改变旋转后的uiview的帧大小? (myview.transform) 感谢大家帮助这个… 这是我的代码: – (void)viewDidLoad { // CREATE MAINSTAGE mainstage = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; mainstage.contentSize = CGSizeMake(self.view.frame.size.width, self.view.frame.size.height); mainstage.showsVerticalScrollIndicator=NO; mainstage.scrollEnabled=NO; mainstage.userInteractionEnabled=YES; mainstage.backgroundColor = [UIColor colorWithRed: 1.0 green: 1.0 blue: 1.0 alpha: 1.0]; mainstage.layer.masksToBounds = YES; [self.view addSubview:mainstage]; // CREATE […]

iOS结合三个video – 旋转中心video

我有三个video 第一个来自后置摄像头。 第二个来自前置摄像头,第三个来自后置摄像头。 video总是以横向模式进行拍摄,右边的主页button。 后置video的方向正确。 使用前置摄像头拍摄的中心video以180度旋转(颠倒)。 我一直在研究和尝试许多方法来转换中心video,没有运气。 我每次都得到相同的结果。 我对整个过程感到非常沮丧。 我在网上阅读的所有内容以及评论者在这里的评论/build议应该可以正常工作,但是不起作用。 无论我尝试进行转换,video都是一样的。 它不断地performance得好像我没有应用任何转换。 没有。 我不明白为什么这个转变会被忽略。 我已经花了几个星期了,而且我到了最后 – 这根本行不通。 这是我的代码的当前迭代: – (void)mergeVideos2:(NSMutableArray *)assets withCompletion:(void (^)(NSString *))completion { AVMutableComposition *mutableComposition = [AVMutableComposition composition]; AVMutableCompositionTrack *videoCompositionTrack = [mutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; __block NSMutableArray *instructions = [[NSMutableArray alloc] init]; __block CGSize size = CGSizeZero; __block CMTime time = kCMTimeZero; __block AVMutableVideoComposition […]

使用CGAffineTransformMakeScale的UIViewanimation以十进制数字立即改变大小

– (void)startAnimation { //reverse – shrinking from full size if (_reversed == YES) { //self.transform = CGAffineTransformMakeScale(1.0, 1.0); [UIView animateWithDuration:1.0f delay:0.0f options:UIViewAnimationOptionCurveLinear animations:^{ self.transform = CGAffineTransformMakeScale(0.1, 0.1); //this line does it instantly self.alpha = 0; } completion:^(BOOL finished) { [self removeFromSuperview]; }]; } else { //non reverse – expanding from middle self.transform = CGAffineTransformMakeScale(0.001, 0.001); […]

Swift中iOS7和iOS8 / iOS9上的仿射变换缩放比例不同

我在Swift中使用了scale仿射变换,并且注意到CGAffineTransformMakeScale在所有的iOS版本上都不起作用。 为了演示这些差异,我创build了一个新的Xcode 7项目,在iOS7设备,iOS8模拟器和iOS9模拟器上运行的Xcode Storyboard上设置了三个testing框。 方框A – 没有限制,位于故事板的中心位置 方框B – 具有与中心水平和中心垂直alignment约束一起设置的高度和宽度。 方框C – 具有高度和宽度以及底部空间和中心水平alignment限制。 然后使用下面的代码将盒子缩放到0.5。 注意:粉红色区域不是盒子或容器,而是用于在发生比例仿射变换之后突出显示蓝色框的位置。 结果: iOS7存在问题,而所有的盒子都减半了,两个盒子A和C不会居中。 iOS8 / iOS9按预期工作 – 无论是否应用约束,所有盒子都将其大小减半并保持居中。 问题: 是什么导致了这个问题,怎么才能最好地纠正和解决,使所有的iOS7 / 8/9版本工作相同? iOS7上的CGAffineTransformMakeScale – 不按预期缩放:-( iOS8 / iOS9 CGAffineTransformMakeScale – 按预期缩放:-) 码: import UIKit class ViewController: UIViewController { @IBOutlet weak var ButtonA: UIButton! @IBOutlet weak var ButtonB: UIButton! @IBOutlet weak var […]

使用用户定义的运行时属性旋转(angular度)UIView

是否有可能旋转UIView或UIImageView,10或15度, 实际上使用用户定义的运行时属性? 还是只能在代码中完成? (注意:为了谷歌,我提到了“angular度”和“度数”,可能会因为设备方向的改变而产生“旋转”的混淆) 或者,你可能以这样的方式子类化 UIView,用户定义的运行时属性将被暴露,这是什么? (我生锈了/)

CGAffineTranformRotate atan2不准确

我正在进行我的视图转换,总是发生奇怪的事情,我的意思是我用这个代码计算angular度: angle = atan2f(currentTouchPoint.y – center.y, currentTouchPoint.x – center.x) – atan2f(previousTouchPoint.y – center.y, previousTouchPoint.x – center.x); 视图旋转但不正确。 我的意思是它在正确的方向旋转,但angular度总是不准确的+/- 0.05弧度。 而当我再次点击时,视图旋转到适当的位置 。 任何adivices? 逗号后的angular度精确到5个位置对我来说很重要。 Some NSLog to show you the problem: First rotation first tap and second tap 2012-01-07 01:01:26.283 Wheel[9080:707] Angle: 0.598412 2012-01-07 01:01:29.281 Wheel[9080:707] Angle: -0.070008 Second rotation first tap and second tap 2012-01-07 […]