- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试使用 CGAffineTransform
旋转我拥有的 ImageView。基本上,我想要发生的是每次 x 坐标增加时,我希望 ImageView 旋转多一点。
我计算了一下,我希望 ImageView 每 1 个 x 坐标
旋转 1.6º
。这是我目前在 gesture recognizer
函数中的内容:
@objc func personDragRecognizer(recognizer: UIPanGestureRecognizer) {
let rotationAngle: CGFloat = 1.6
let translation = recognizer.translation(in: rView)
if let view = recognizer.view {
view.center = CGPoint(x:view.center.x + translation.x, y:view.center.y + translation.y)
view.transform = CGAffineTransform(rotationAngle: rotationAngle)
}
recognizer.setTranslation(CGPoint.zero, in: rView)
if recognizer.view?.center == CGPoint(x: 197.5, y: 232.5) {
PlaygroundPage.current.liveView = eeView
}
问题在于它旋转
到576º bc
,即1.6 乘以 360
。而且它不会继续旋转它只会旋转一次。我希望它不断旋转。
如果有人能提供帮助,我们将不胜感激。非常感谢!!
干杯,西奥
最佳答案
我不确定我是否完全理解您要实现的功能。这是负责图像旋转的 UIView 子类的示例。
class CustomView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
let panGR = UIPanGestureRecognizer(target: self, action: #selector(panGestureDetected(sender:)))
self.gestureRecognizers = [panGR]
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
var gestureBeginning: CGFloat = 0.0
func panGestureDetected(sender: UIPanGestureRecognizer) {
guard sender.numberOfTouches > 0 else { return }
let touchPoint = sender.location(ofTouch: 0, in: self)
switch sender.state {
case .began:
gestureBeginning = touchPoint.x
print("gestureBeginning: \(gestureBeginning)")
case .changed:
let progress = touchPoint.x - gestureBeginning
print("progress: \(progress)")
let rotationAngle: CGFloat = 1.6 * progress
let view = self.subviews[0]
let rads = rotationAngle * .pi / 180
view.transform = CGAffineTransform(rotationAngle: rads)
default:
break
}
}
}
在 Playground 上运行它:
let imageView = UIImageView(image: #imageLiteral(resourceName: "image.png"))
imageView.frame = CGRect(origin: CGPoint(x: 50.0, y: 50.0), size: CGSize(width: 150.0, height: 150.0))
let containerView = CustomView(frame: CGRect(origin: .zero, size: CGSize(width: 250.0, height: 250.0)))
containerView.addSubview(imageView)
PlaygroundPage.current.liveView = containerView
PlaygroundPage.current.needsIndefiniteExecution = true
关于ios - 使用 CGAffineTransform 和 PanGestureRecognizer 旋转 ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43072661/
如何将 CGAffineTransform 转换为 CGTransform3D? 我使用 UIImagePickerController 作为相机 Controller 。我在相机 View 的上部添
使用此命令时,我在标题中收到错误消息: CGPathContainsPoint(Hitbox.CGPath, self.transform, point, false) Hitbox 是一个 UIBe
我正在尝试使用 CGAffineTransformRotate 旋转基于触摸手势添加到父 View 上的自定义 View (VIEWA)。一切正常。现在,我在父 View 上添加了另一个 View (
我正在尝试在 Swift 中创建 CGPath。我正在使用 CGPathCreateWithRect(rect, transformPointer) . 我怎样才能得到 UnsafePointer来自
什么时候使用 CABasicAnimation 和 CAKeyFrameAnimation 和 CGAffineTransform? 最佳答案 CABasicAnimation :为图层属性提供基本的
我有这个功能可以将 UIButtons 旋转 45 度。但是一旦旋转,调用相同的方法不会再旋转,并且按钮在第一次旋转后卡在其旋转位置。有任何想法吗? - (void)rotateImage:(UIBu
在我的代码中,我有一个表格,在我的表格中,我有一个 slider ,我将其转换为垂直的。 metricSlider.transform = CGAffineTransformRotate(metric
在我的实验中,我得出以下结论: YourView.transform = CGAffineTransformMakeRotation( positive value ); 将顺时针旋转 View ,并
我尝试为 UILabel 设置动画: let label: UILabel = UILabel() var transform = CGAffineTransform.identity UIView.
问题: 当使用 CGAffineTransform 时,我失去了 UIView 及其所有 subview 的质量。 代码 我当前正在运行以下代码来缩放和移动我的 UIView。 func an
我有一个 ImageView ,我正在通过 UISliders 缩放和旋转它。这是我这样做的方法: - (IBAction)sizeSlider:(UISlider *)sender { in
我正在开发一个允许用户旋转时钟指针的应用程序。为此,我正在使用 needle 的 imageview 的 transform 属性: CGAffineTransform newTrans = CGAf
我刚刚意识到一些很奇怪的事情。使用 Xcode 5 中的 Storyboard,我创建了一个非常简单的应用程序;只有一个 View 的 View Controller 。在此 View 上有 slid
我正在对 UILabel 应用翻译,这应该导致标签在其开始的相同 x 位置结束,但由于某种原因它似乎卡在左边。 [UIView animateWithDuration:1 delay:0 usingS
我有一个实例方法,我想返回 CGAffineTransform。我目前收到错误 Semantic Issue: Initializing 'CGAffineTransform' (aka 'struc
IU 在 Java 方面经验丰富,但对 Objective C 还是个新手,所以这可能非常愚蠢。尽管如此,我已经苦苦挣扎了一段时间,从以下代码中寻找我得到预期表达式错误的原因。 CGAffineTra
我可能误解了 CGAffineTransform 的工作原理,但它似乎给出了关于框架原点的奇怪结果。 例如: print(attribute.frame) attrib
我在某个角度添加了 UIView。现在在运行时我想将该 View 向上移动(比如 20 像素)。 开始 dragView = [[DragbleView alloc] initWithFrame:C
我正在尝试缩放 AVCaptureVideoPreviewLayer,以便它显示来自相机的“放大”预览;我可以使用 setAffineTransform:CGAffineTransformMakeSc
我正在尝试编写代码,当触发发生时,UIImageView 的实例会创建一个缓慢的“增长”效果,CGAffineTransform 会运行 20 秒。 当触发器在第一次转换完成之前再次发生时,就会出现此
我是一名优秀的程序员,十分优秀!