- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序中有一个水平的 UIScrollview,它有 1 个非常长的 UIImageView 开始。我有一个计时器和动画来创建 ScrollView 下的图像自动滚动的错觉。图像结束后,我会动态地将相似的图像添加到 ScrollView 中,因此它看起来应该像图像在重复一样。
这就是我希望它们在 ScrollView 下的显示方式:image1|image2|image3|image4......这些图像将从右向左滚动。在您登录之前,它在 Behance 的 iphone 应用程序中的确切工作方式。
这是我的代码(在 Storyboard 中我有 ScrollView 和一个 UIIMageview 已经添加)。
override func viewDidAppear(_ animated: Bool) {
Timer.scheduledTimer(timeInterval: 0.6, target: self, selector: #selector(scrollImage), userInfo: nil, repeats: true)
}
@objc func scrollImage() {
offSet.x = offSet.x + CGFloat(20)
UIView.animate(withDuration: 1.0, animations: {
self.behanceView.setContentOffset(self.offSet, animated: false)
})
}
func addImagetoScrollView() {
let imageView = UIImageView(image:UIImage(named:"Landing_Scrollable"))
print(imageCount*Int(self.behanceView.contentSize.width)+100)
imageView.frame = CGRect(x:imageCount*Int(self.behanceView.contentSize.width), y: 0, width: 875, height: 502)
self.behanceView.contentSize = CGSize(width: imageView.bounds.size.width * CGFloat(imageCount), height: imageView.bounds.size.height)
self.behanceView.addSubview(imageView)
imageCount+=1
}
extension ViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
let scrollViewWidth = scrollView.frame.size.width;
let scrollOffset = scrollView.contentOffset.x;
print(imageCount*Int(self.behanceView.contentSize.width - scrollViewWidth))
if scrollOffset >= CGFloat(imageCount*Int(self.behanceView.contentSize.width - scrollViewWidth)) {
self.addImagetoScrollView()
}
}
}
但是当我看到它在运行时,它做了一些奇怪的事情并且动画全部关闭。
有人可以帮忙吗
谢谢,
最佳答案
我从未见过“Behance”应用程序,但我猜你是在问如何无限期地在屏幕上设置无缝平铺背景图像的动画,如下所示:
( Pattern image by Evan Eckard. )
我在演示中使用了 1 秒的动画持续时间,但您可能希望在真实应用中使用更长的持续时间。
你不应该为此使用计时器。 Core Animation 可以为您执行动画,让它执行动画更流畅、更高效。 (你可能认为核心动画正在执行你的动画,因为你正在使用 UIView
动画,但我相信动画 ScrollView 的 contentOffset
确实不使用核心动画,因为 ScrollView 必须在每个动画步骤上调用其委托(delegate)的 scrollViewDidScroll
。)
您也不应该为此使用 ScrollView 。 UIScrollView
的存在是为了允许用户滚动。由于您不允许用户滚动,因此不应使用 UIScrollView
。
这里是你应该如何设置你的背景:
创建两个相同的 ImageView (编号为 0 和 1),显示相同的图像。确保每个 ImageView 都足够大以填满屏幕。
将 ImageView 0 的左边缘放在 Root View 的左边缘。将 ImageView 1 的左边缘放在 ImageView 0 的右边缘。由于每个 ImageView 都足够大以填满屏幕,因此 ImageView 1 将完全从屏幕的右边缘开始。
<动画 ImageView 0 的 transform.translation.x
从 0 到 -imageView.bounds.size.width
。这将使它向左滑动恰好是它自己的宽度,所以当动画结束时, ImageView 0 的右边缘位于屏幕的左边缘(因此 ImageView 0 完全不在屏幕的左边缘) ).将动画的 repeatCount
设置为 .infinity
。
将相同的动画添加到 ImageView 1。因此 ImageView 1 在 ImageView 0 离开时出现在屏幕上,正好覆盖 ImageView 0 的动画显示的像素。
两个动画同时结束。当它们结束时, ImageView 1 恰好位于 ImageView 0 开始时的位置。由于两个动画都设置为无限重复,因此它们都立即重新开始。当 image view 0 的动画重新开始时,image view 0 立即跳回到它的起始位置,也就是 image view 1 结束的位置。由于两个 ImageView 显示相同的图像,因此屏幕上的像素不会改变。这使得动画循环无缝。
这是我的代码:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
for imageView in imageViews {
imageView.image = patternImage
imageView.contentMode = .scaleToFill
view.addSubview(imageView)
}
}
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let bounds = view.bounds
let patternSize = patternImage.size
// Scale the image up if necessary to be at least as big as the screen on both axes.
// But make sure scale is at least 1 so I don't shrink the image if it's larger than the screen.
let scale = max(1 as CGFloat, bounds.size.width / patternSize.width, bounds.size.height / patternSize.height)
let imageFrame = CGRect(x: 0, y: 0, width: scale * patternSize.width, height: scale * patternSize.height)
for (i, imageView) in imageViews.enumerated() {
imageView.frame = imageFrame.offsetBy(dx: CGFloat(i) * imageFrame.size.width, dy: 0)
let animation = CABasicAnimation(keyPath: "transform.translation.x")
animation.fromValue = 0
animation.toValue = -imageFrame.size.width
animation.duration = 1
animation.repeatCount = .infinity
animation.timingFunction = CAMediaTimingFunction(name: .linear)
// The following line prevents iOS from removing the animation when the app goes to the background.
animation.isRemovedOnCompletion = false
imageView.layer.add(animation, forKey: animation.keyPath)
}
}
private let imageViews: [UIImageView] = [.init(), .init()]
private let patternImage = #imageLiteral(resourceName: "pattern")
}
关于ios - 使用 UIImage 滚动 UIScrollView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052371/
我有一个应用程序,它将在 SQLDatabase 中保存一组图像,然后用户将拍摄一张照片,我希望能够将它与数据库中的图像相匹配。 我不知道从哪里开始,有人可以帮忙吗?指出我正确的方向? 谢谢 最佳答案
在我的项目中,我有两个 UIViewController。在我的第一个 ViewController 上,我有一个 UIImageView,并且有一个来自 url 的图像。在第二个 ViewContr
如何从上下文创建 UIImage 以便我可以返回它?我只希望它有透明像素。我有一种不同的方法,可以将较小的 UIImage 添加到较大的 UIImage,但我需要从头开始。 + (UIImage *)
我想知道如何将 UIImage 居中到 UIButton。我正在使用 UIButton 的 setImage 方法来放置 UIImage .. 最佳答案 您可以使用 contentMode 属性: b
我从相机获取 UIimages 并将它们分配给要显示的 UIImageViews。当我这样做时,相机会给我一个 1200 x 1600 像素的图像,然后我将其分配给我的应用程序中的 UIImageVi
Swift 4 有 Codable这太棒了。但是UIImage默认情况下不符合它。我们怎么能做到这一点? 我试过 singleValueContainer和 unkeyedContainer exte
我的代码在普通设备上运行良好,但在视网膜设备上创建模糊图像。 有人知道我的问题的解决方案吗? + (UIImage *) imageWithView:(UIView *)view { UIGr
我总是得到:CGImageCreate:无效的图像大小:0 x 0。 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; // En
我有一张图片,想创建一张如下所示的黑色图片: 我有一个 View 和一个 ImageView ,因为它是 subview 。 ImageView 的 alpha 为 0.5,其色调颜色为黑色。 Vie
几天来我一直被困在一些必须非常简单的事情上,我已经搜索了几天,但我似乎无法找到正确的代码来工作。 我有两张图片,一张是背景图片,另一张会遮盖第一张图片。我可以用手势移动蒙版图像。我可以缩放、旋转和移动
我正在尝试拍摄类似背景透明的三角形图像,并根据用户偏好在三角形部分或背景部分上应用圆点图像。例如,我如何将圆点应用于三角形部分,然后将条纹应用于图像的透明部分。有针对这种事情的屏蔽技术吗? 非常感谢,
给出下面的图片,百分比为 25%。如何生成另一个代表给定图像径向部分 25% 的 UIImage?非常感谢任何帮助。 输入 输出 - (UIImage *)radialPortion:(float)p
这是我的代码: - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView { // at this point the
我正在使用扩展程序对我的图像进行像素化处理,如下所示: func pixellated(scale: Int = 8) -> UIImage? { guard let ciImage = CI
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 6 年前。 Improve t
我有两个 UIImage 实例。我怎样才能创建第三个 UIImage 这只是拼接在一起的两个原始图像?我想要第一张图片在顶部,第二张图片在底部,这样顶部图片的底部边缘与底部图像的顶部边缘齐平。 最佳答
我有一个 UIImage 和一个 CGPoint,它们告诉我应该朝哪个方向移动它以创建另一个图像。背景可以是任何东西。 提供初始 UIImage 我如何创建新的?最有效的方法是什么? 这是我正在做的:
我有一个 UIImage,显示在 UIImageView 中。我在 UIImageView 中还有另一张图片,它位于第一张图片上方。我希望能够仅在第一张图片的边界内拖动第二张图片。为了让我的目标更清楚
我看过这个问题:UIImage Shadow Trouble 但接受的答案对我不起作用。 我想做的是获取一个 UIImage 并向其添加阴影,然后返回一个全新的 UIImage、阴影和所有内容。 这就
我有两张图片:第一张是用户个人图片,第二张是图标(角标(Badge))。 我想在第一个 uiimage(用户图像)的左下角添加第二个 uiimage(图标),并将它们保存到一个新的 Uiimage 中
我是一名优秀的程序员,十分优秀!